在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
示例:
输入: -3, 0, 3, 4, 0, -1, 9, 2
输出: 45
说明: 假设矩形面积不会超出 int 的范围。
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
int areaOne = (C - A) * (D - B);
int areaTwo = (G - E) * (H - F);
int width, length;//重叠部分的宽、长
//C <= E ABCD在EFGH的左边,不重叠
//G <= A ABCD在EFGH的右边,不重叠
//H <= B ABCD在EFGH的上边,不重叠
//D <= F ABCD在EFGH的下边,不重叠
if (C <= E || G <= A || H <= B || D <= F){
return areaOne + areaTwo;
}
int wid1 = min(C-E,G-A);
int wid2 = min(C-A,G-E);//这里用于处理当一个的宽处于另一个的里面
width = min(wid1,wid2);
int hei1 = min(D-F,H-B);
int hei2 = min(D-B,H-F);//这里用于处理当一个的长处于另一个的里面
length = min(hei1,hei2);
return areaOne - (width * length) + areaTwo;
}
};