leetcode 836 矩形重叠

这道题,正向思维,那肯定是一堆的条件判断,小编根据不停的试错,发现有如下7种情况,

            第二行的粉色到红色,属于渐变过程,有两种情况,分开讨论


根据上述7中情况:写了如下代码:

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

};

运行时间:4ms;


网上看过一个更优秀的解:

链接如下,运行时间3ms,而且只有一行代码,小编真是佩服至极。

https://www.cnblogs.com/king-3/p/9063963.html

点击打开链接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值