223. 矩形面积
题目描述
在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/655957e0b84d5fbdd65a6d740008a53f.png)
示例:
输入: -3, 0, 3, 4, 0, -1, 9, 2
输出: 45
说明: 假设矩形面积不会超出 int 的范围。
题解:
模拟。
对于同一水平线上的两条线段 [a, b]
和 [c, d]
,它们的交集为 [max(a, c), min(b, d)]
。
我们分别求出横轴和纵轴上的交集,判断是否相交,如果不相交,则面积为两个矩形面积之和,否则减去相交部分面积。
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
long area = (long)(C - A) * (D - B) + (long)(G - E) * (H - F);
long dx = min( C, G ) + 0LL - max( A, E );
if ( dx < 0 ) return area;
long dy = min( D, H ) + 0LL - max( B, F );
if ( dy < 0 ) return area;
return area - dx * dy;
}
};
/*
时间:4ms,击败:95.03%
内存:5.9MB,击败:48.01%
*/