解题思路
首先,我们调整两个矩形,让第一个矩形是靠最左边的;
其次,先考虑没有重叠的情况,有三种情况,如图所示:
- rectangle1 的下边都大于(等于)rectangle2 的上边,即 B >= H
- rectangle1 的右边都小于(等于)rectangle2的左边,即 E >= C
- rectangle1 的上边都小于(等于)rectangle2的下边,即 F >= D
最后, 要考虑重叠的情况,因为一定有重叠,所以可以找到上下左右边界
- 上边界,取两个矩形的上边界的最小值
- 下边界,取两个矩形的下边界的最大值
- 左边界,取两个矩形的左边界的最大值
- 右边界,取两个矩形的右边界的最小值
得到重叠面积,只需要两个矩形相加减去重叠面积即可!
代码实现
class Solution {
public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
if(A > E){
return computeAreaCore(E, F, G, H, A, B, C, D);
}
return computeAreaCore(A, B, C, D, E, F, G, H);
}
public int computeAreaCore(int A, int B, int C, int D, int E, int F, int G, int H) {
int area1 = (C - A) * (D - B);
int area2 = (G - E) * (H - F);
//两个矩形无重合的情况
if(B >= H || E >= C || D <= F){
return (area1 + area2);
}
int width = Math.min(C, G) - Math.max(A, E);
int height = Math.min(D, H) - Math.max(B, F);
return area1 + area2 - width * height;
}
}