链接:https://leetcode-cn.com/problems/rectangle-area/
在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
示例:
输入: -3, 0, 3, 4, 0, -1, 9, 2
输出: 45
说明: 假设矩形面积不会超出 int 的范围。
思路:其实本题最核心的就是求矩阵交集部分的面积,需要的结果=两个矩阵面积和 - 交集面积。我们来看一下矩阵相交的情况,推一下规律或公式:
可以看出,交集的矩形部分,左上角的x坐标,来自两个矩形的左端x的更大值,左上角的y坐标,来自两个矩形的上端的y的更大值,右下角类似。
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
int Lx, Ly, Rx, Ry;
Lx = max(A, E); // 0
Ly = min(D, H); // 2
Rx = min(C, G); // 3
Ry = max(B, F); // 0
if(Lx > Rx || Ly < Ry) return (H - F) * (G - E) + (D - B) * (C - A);
return (H - F) * (G - E) - (Rx - Lx) * (Ly - Ry) + (D - B) * (C - A);
}
};