LeetCode第 836 题:矩形重叠(C++)

836. 矩形重叠 - 力扣(LeetCode)

在这里插入图片描述
类似:LeetCode第 223 题:矩形面积(C++)_zj-CSDN博客

但是

class Solution {
public:
    bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
        if(rec1[0] >= rec2[2] || rec1[1] >= rec2[3] || rec1[2] <= rec2[0] || rec1[3] <= rec2[1])   return false;
        return true;
    }
};

这样并不行,这个用例:

[-1,0,1,1]
[0,-1,0,1]

会发现第二个矩形就是一条直线。。。所以判断一下特殊情况:

class Solution {
public:
    bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
        if(rec1[0] >= rec2[2] || rec1[1] >= rec2[3] || rec1[2] <= rec2[0] || rec1[3] <= rec2[1])   return false;
        if(rec1[0] == rec1[2] || rec1[1] == rec1[3] || rec2[1] == rec2[3] || rec2[0] == rec2[2]) return false;
        return true;
    }
};

或者这样:

return min(rec1[2], rec2[2]) - max(rec1[0], rec2[0]) > 0 && min(rec1[3], rec2[3]) - max(rec1[1], rec2[1]) > 0;

上面这样的理解是考虑重叠区域(如果有)的四个边界,那必然是上边界 > 下边界,右边界 > 左边界。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值