「每日LeetCode」2020年12月4日

本文最后更新于:2023年3月19日 晚上

Lt836. 矩形重叠

836. 矩形重叠

矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。矩形的上下边平行于 x 轴,左右边平行于 y 轴。
如果相交的面积为 ,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。
给出两个矩形 rec1rec2 。如果它们重叠,返回 true;否则,返回 false
示例 1:

1
2
输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
输出:true

示例 2:

1
2
输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]
输出:false

示例 3:

1
2
输入:rec1 = [0,0,1,1], rec2 = [2,2,3,3]
输出:false

提示:

  • rect1.length == 4
  • rect2.length == 4
  • -10 <= rec1[i], rec2[i] <= 10
  • rec1[0] <= rec1[2]rec1[1] <= rec1[3]
  • rec2[0] <= rec2[2]rec2[1] <= rec2[3]

思路

当一个矩形在另外一个矩形的外侧,即:左下角的点在另外一个矩形右上角的点上侧或右侧,或右上角的点在另外一个矩形左下角点的左侧或下侧时,两个矩形不相交,根据以上情况可以解出题目。要注意题目输入用例有一个线段用例,还需要判断构成的面积是否大于 0。

解答

1
2
3
4
5
6
7
8
9
10
11
12
/**
* @param {number[]} rec1
* @param {number[]} rec2
* @return {boolean}
*/
var isRectangleOverlap = function (rec1, rec2) {
let [[x1, y1, x2, y2], [x3, y3, x4, y4]] = [rec1, rec2];
return (
!(y3 >= y2 || x3 >= x2 || x4 <= x1 || y4 <= y1) &&
(x2 - x1) * (y2 - y1) * (x4 - x3) * (y4 - y3) > 0
);
};