223. 矩形面积 - 力扣(LeetCode)
参考:简单的考虑 - 矩形面积 - 力扣(LeetCode)
那么重叠的时候,重叠区域的边界:
-
上边界,取两个矩形的上边界的最小值
-
下边界,取两个矩形的下边界的最大值
-
左边界,取两个矩形的左边界的最大值
-
右边界,取两个矩形的右边界的最小值
那么重叠区域的面积就容易计算了
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
//总面积 = 面积1+面积2-重叠面积
//分开写防止溢出
int area1 = (C-A)*(D-B), area2 = (G-E)*(H-F);//矩形的面积之和
if(A >= G || B >= H || C <= E || D <= F) return area1+area2;//无重叠
int topx = min(C, G), topy = min(D, H);
int bottomx = max(A, E), bottomy = max(B, F);
return area1 - (topx-bottomx)*(topy-bottomy) + area2;
}
};