LeetCode 836. 矩形重叠(判断两个矩形是否相交)

题意:

矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。
矩形的上下边平行于 x 轴,左右边平行于 y 轴。

如果相交的面积为 正 ,则称两矩形重叠。
需要明确的是,只在角或边接触的两个矩形不构成重叠。

给出两个矩形 rec1 和 rec2 。如果它们重叠,返回 true;否则,返回 false 。

数据范围:
rect1.length == 4
rect2.length == 4
-1e9 <= rec1[i], rec2[i] <= 1e9
rec1[0] <= rec1[2] 且 rec1[1] <= rec1[3]
rec2[0] <= rec2[2] 且 rec2[1] <= rec2[3]

解法:

如果其中一个矩形面积为0,那么return 0.

如果两个矩形有交集,那么在x轴上和y轴上的投影也都会有交集.
只需要判断投影是否都有交集即可.

code:

class Solution {
    
    
public:
    bool isRectangleOverlap(vector<int>& a, vector<int>& b) {
    
    
        if(a[0]==a[2]||a[1]==a[3]||b[0]==b[2]||b[1]==b[3])return 0;//其中一个矩形面积为0的情况.
        if(a[2]<=b[0]||a[0]>=b[2])return 0;
        if(a[3]<=b[1]||a[1]>=b[3])return 0;
        return 1;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_44178736/article/details/114110237