您的位置:首页 > 其它

Leetcode - Rectangle Area

2016-05-04 22:14 337 查看

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.

Java Code

public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
//先假设两个矩形之间有重叠
//重叠区域的左下角点的横/纵坐标取两个矩形左下角点的横/纵坐标之中的较大值
int I = A > E ? A : E;
int J = B > F ? B : F;
//重叠区域的右上角点的横/纵坐标取两个矩形右上角点的横/纵坐标之中的较小值
int K = C < G ? C : G;
int L = D < H ? D : H;

int overlap = 0;
//如果两个矩形有重叠区域即左下角(I,J)位于右上角(K,L)的左下方,则可计算出重叠面积
if(I < K && J < L)
overlap = (K - I) * (L - J);

//两个矩形的并集区域面积等于两者面积之和减去交集区域(重叠区域)的面积
return (C - A) * (D - B) + (G - E) * (H - F) - overlap;
}


说明

本题关键的问题有两点,第一是,求两者的并集区域面积最好用间接法,这一点比较容易想到;第二是,如何用统一的方式处理两个矩形各种可能的有重叠/无重叠的情况。如果我们通过他们各自的两个角点的坐标来分情况讨论,代码会显得非常繁琐而且有可能出现遗漏。我们可以通过在坐标系中分析这两个矩形的位置关系,先将其分为有重叠和无重叠两大类情况,有重叠则需要计算其重叠区域面积。

本题的重点在于判断两个矩形是否有交集,有交集时两者相交于各自的哪个角,或者是一个矩形完全包含另一个矩形。由于矩形在的二维平面上有x和y两个变量,我们可以先简化一下,只看x变量,也就是先找两个矩形的宽所在的边在x轴上的投影的交集,求两条线段之间的交集我们就比较好处理了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode rectangle overlap