题目:
给定两个矩形,分别以四个数字 [x1,y1,x2,y2] 表示,其中 (x1,y1)
表示矩形左下角
,(x2,y2)
表示矩形右上角
(题目这里写错了,两个下角是无法确定一个矩形的),矩形的上下边平行于 x 轴,左右边平行于 y 轴。
如果两个矩形相交的面积为正,则两矩形重叠。如果重叠则输出 true ,否则输出 false
解题思路:
找到重叠的矩形
如果两个矩形重叠
- 那么重叠的矩形
左下角x
一定是两个矩形左下角x的max值,右上角x
一定是两个矩形右上角的min值 - 重叠矩形
左下角y
一定是两个矩形左下角y的max值,右上角y
一定是两个矩形右上角的min值 - 现在,我们只需要判断这个“重叠”出来的矩形,是不是个矩形,即,我们得到的重叠矩形右上角,在不在左下角的右上方
c++实现
class Solution {
public:
bool overlapRec(vector<int>& r1, vector<int>& r2) {
return (min(r1[2], r2[2]) > max(r1[0], r2[0])) && (max(r1[1], r2[1]) < min(r1[3], r2[3]));
}
};
python实现
class Solution:
def overlapRec(self , r1: List[int], r2: List[int]) -> bool:
return (min(r1[2], r2[2]) > max(r1[0], r2[0])) and (max(r1[1], r2[1]) < min(r1[3], r2[3]))