LeetCode 836 矩形重叠 C++

矩形以列表[x1,y1,x2,y2]的形式表示,其中(x1,y1)是左下角的坐标,(x2,y2)是右上角的坐标。
如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。
给出两个矩形,判断它们是否重叠并返回结果。
示例1:

Input :rec1 = [0,0,2,2], rec2 = [1,1,3,3]
Output:true

示例 2:

Input :rec1 = [0,0,1,1], rec2 = [1,0,2,1]
Output:false

说明:

两个矩形 rec1rec2 都以含有四个整数的列表的形式给出。
矩形中的所有坐标都处于 -10^910^9之间。

分析:
假设两个矩形的四个顶点的坐标分别如图所示:
在这里插入图片描述
分析两个矩形重叠的情况比较复杂,那么就转而分析两个矩形不重叠的临界条件。两个矩形有四种不重叠情况。
情况1:
Alt
此时两个矩形的位置关系是:x2 = a1 y2 = b1 两个矩形刚好不重叠。如果绿色矩形向左下方移动,两个矩形就会发生重叠,即重叠时两个矩形的位置关系为x2 > a1 y2 > b1
另外三种情况分别如下图所示:
在这里插入图片描述
按照在情况1中的分析方法,得到这三种情况下,重叠时的矩形位置关系分别为:

  • x2 > a1y1 < b2
  • x1 < a2y2 > b1
  • x1 < a2y1 < b2

在结合情况1,对四种情况进行综合,得到最终的矩形重叠时满足的位置关系为:
x1 < a2y1 < b2x2 > a1y2 > b1
相应的代码为:

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

运行情况:
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值