题目:

给定两个矩形,分别以四个数字 [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]))