Leetcode 836.矩形重叠【C++】
本文最后更新于:2023年2月8日 晚上
题目
矩形以列表 [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
轴默认指向上。- 你可以仅考虑矩形是正放的情况。
解题思路
这个题我觉得主要是考思维吧,因为这个题完全没用到循环什么的,就一个两个判断就可以了,以至于我一开始都不太相信就是这么做的……
根据题目的意思,两个矩形的坐标一定是左下角坐标在前,右上角坐标在后,也就是可以确定 rec1[0]
不可能比 rec1[2]
大,其它的坐标也是同理。
首先对传入的 rec1
和 rec2
做检查,矩形坐标不合法就直接返回 false
。
如果矩形坐标合法,那么要使两个矩形重叠,只需要满足 rec1
右上角的点在 rec2
左下角的点的右上方,rec1
左下角的点在 rec2
右上角的点的左下方。
代码
class Solution {
public:
bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
if (rec1.empty() || rec2.empty() ||
rec1[0] == rec1[2] || rec1[1] == rec1[3] ||
rec2[0] == rec2[2] || rec2[1] == rec2[3])
return false;
//只要rec1右上角的点在rec2左下角的点的右上方,
//rec1左下角的点在rec2右上角的点的左下方,就一定重叠
if (rec1[2] > rec2[0] && rec1[3] > rec2[1] &&
rec1[0] < rec2[2] && rec1[1] < rec2[3])
return true;
return false;//默认返回false
}
};
Leetcode 836.矩形重叠【C++】
https://mxy493.xyz/2020031849025/