223. Rectangle Area

Question

Find the total area covered by two rectilinear rectangles in a 2D plane.

Each rectangle is defined by its bottom left corner and top right corner as shown in the figure.

Assume that the total area is never beyond the maximum possible value of int.

Solution

这道题最关键的是要找出重叠的部分,两个矩形的面积和-重叠部分的面积就是答案。

观察重叠部分,肯定都是在中间,需要找出重叠部分上下左右的边。重叠部分左边界肯定是两个矩形左边界的较大者,同理,重叠部分右边界肯定是两个矩形右边界的较小者。这里可以用一个小技巧,即取右边界时,和刚才取的左边界比较,取两者中的较大者为右边界,这样就把两个矩形没有重叠的情况也包括进来了(没有重叠的话在这里重叠部分的左右边界会相同,也就是宽为0,面积自然就是0),不用单独讨论了。以此类推,可以求出重叠部分的上下边界。

代码如下:

public class Solution {
    public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
        int left = Math.max(A, E);
        int right = Math.max(left, Math.min(C, G));
        int bottom = Math.max(B, F);
        int top = Math.max(bottom, Math.min(D, H));

        return (C- A) * (D- B) + (G- E) * (H - F) - (right - left) * (top - bottom);
    }
}

results matching ""

    No results matching ""