题目: 矩形重叠
矩形以列表 [x1, y1, x2, y2]
的形式表示,其中 (x1, y1)
为左下角的坐标,(x2, y2)
是右上角的坐标。
如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。
给出两个矩形,判断它们是否重叠并返回结果。
示例 1:
输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3] 输出:true
示例 2:
输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1] 输出:false
提示:
- 两个矩形
rec1
和rec2
都以含有四个整数的列表的形式给出。 - 矩形中的所有坐标都处于
-10^9
和10^9
之间。 x
轴默认指向右,y
轴默认指向上。- 你可以仅考虑矩形是正放的情况。
推翻了自己的很多种想法,无奈看了一下评论区的大佬,顿时毛瑟顿开。
我们可以对题目实行“降维打击”,如果我们只关注x轴和y轴,那么两个矩形则变成了两条线段。
那么不重叠的两个矩形必然满足两个条件:
- 左边矩形的最右面 <= 右边矩形的最左边:即 rec1[2] <= rec2[0] || rec2[2] <= rec1[0];
- 下面矩形的最上面 <= 上面矩形的最下面: 即 rec1[3] <= rec2[1] || rec2[3] <= rec1[0];
只要符合这两条,那么这两个矩形就不会相交。
由此得出代码:
bool isRectangleOverlap(int* rec1, int rec1Size, int* rec2, int rec2Size){
if((rec1[2] <= rec2[0] || rec2[2] <= rec1[0])||(rec1[3] <= rec2[1] || rec2[3] <= rec1[0])) return false;//不重叠 return true; //重叠 }
2020-03-18-21:34:53
我的第一篇博客