Note:
容斥原理,算出来两个并减去交
一维上来看 A B C D四个点, AB是一段 CD是一段
那么他们的交集部分可以看做是
min(尾结点) - max (头结点)
如果两个是不想交的,那么就是这个算出来就是个负数,这样我们直接跟0取个max就可以覆盖左右的情况了
二维的情况上来看的话,就是横坐标找一次,纵坐标找一次,就可以计算重叠部分的面积了,算出来总面积,减掉重叠部分的面积,就可以了
代码如下:
class Solution {
public:
int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {
int x = max(0, min(ax2, bx2) - max(ax1, bx1));
int y = max(0, min(ay2, by2) - max(ay1, by1));
return (ax2 - ax1) * (ay2 - ay1) + (bx2 - bx1) * (by2 - by1) - x * y;
}
};