问题
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.
![](https://img.haomeiwen.com/i4459865/6c44ff9b27addc58.png)
Assume that the total area is never beyond the maximum possible value of int.
例子
-2 -2 2 2 -2 -2 2 2
16
分析
- 方法一:首先判断两个矩形是否相交。如果相交,总面积就是两个矩形的面积和;如果不相交,总面积等于两个矩形的面积和-重叠部分的面积;
- 方法二:通过min max函数直接求出重叠部分的面积,当矩形不相交时,重叠面积为0。
要点
分情况讨论=>归一化为一种情况
时间复杂度
O(1)
空间复杂度
O(1)
代码
方法一
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
int total = (C - A) * (D - B) + (G - E) * (H - F);
if (C <= E || G <= A || D <= F || H <= B) return total;
vector<int> x{A, C, E, G};
vector<int> y{B, D, F, H};
sort(x.begin(), x.end());
sort(y.begin(), y.end());
int intersection = (x[2] - x[1]) * (y[2] - y[1]);
return total - intersection;
}
};
方法二
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
int left = max(A, E), right = max(min(C, G), left); // 当两矩形不相交时,right = left
int bottom = max(B, F), top = max(min(D, H), bottom); // 当两矩形不相交时,top = bottom
return (C - A) * (D - B) + (G - E) * (H - F) - (right - left) * (top - bottom);
}
};
网友评论