# [836] 矩形重叠

矩形以列表 [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 轴默认指向上。

你可以仅考虑矩形是正放的情况。

这道题我们可以通过反证的方式来思考。即若两矩形不重合,那么应满足什么条件。

当两矩形不重合时,矩形2(x3,y3,x4,y4)对于矩形1(x1,y1,x2,y2)的方位一共有上、下、左、右四种可能。分别来考虑:

  1. 当矩形2在左时,即矩形2的右边坐标小于矩形1的左边坐标,即x4 <= x1
  2. 当矩形2在右时,即矩形2的左边坐标大于矩形1的右边坐标,即x3 >= x2
  3. 当矩形2在下时,即矩形2的上边坐标小于矩形1的下边坐标,即y4 <= y1
  4. 当矩形2在上时,即矩形2的下边坐标大于矩形1的上边坐标,即y3 >= y2

结合四种情况,即可得出,两矩形不重合的条件为:x4 <= x1 || x3 >= x2 || y4 <= y1 || y3 >= y2

那么将该条件取反,即可得到两矩形重合的条件了:x4 > x1 && x3 < x2 && y4 > y1 && y3 < y2

var isRectangleOverlap = function(rec1, rec2) {
  return rec2[2] > rec1[0] && rec2[0] < rec1[2] && rec2[3] > rec1[1] && rec2[1] < rec1[3]
};