https://leetcode-cn.com/problems/rectangle-overlap/
点击查看【bilibili】

题目

矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。矩形的上下边平行于 x 轴,左右边平行于 y 轴。

如果相交的面积为 正 ,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。

给出两个矩形 rec1 和 rec2 。如果它们重叠,返回 true;否则,返回 false 。

示例

  1. 输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
  2. 输出:true
  3. 输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]
  4. 输出:false
  5. 输入:rec1 = [0,0,1,1], rec2 = [2,2,3,3]
  6. 输出:false

解答

rec2固定,移动rec1,
不重叠的情况:

  1. 在rec2的左边(rec1右 <= rec2左) rec1[2] <= rec2[0]
  2. 在rec2的右边(rec1左 >= rec2右) rec1[0] >= rec2[2]
  3. 在rec2的上边(rec1下 >= rec2 上)rec1[1] >= rec2[3]
  4. 在rec2的下边(rec1上 <= rec2下) rec1[3] <= rec2[1]

image.png
image.png

答案

  1. var isRectangleOverlap = function(rec1, rec2) {
  2. let temp = false
  3. // 判断是否是矩形
  4. function isRectangle(rec) {
  5. return (rec [0] != rec [2]) && (rec [1] != rec [3]);
  6. }
  7. if (
  8. rec1[2] <= rec2[0] ||
  9. rec1[0] >= rec2[2] ||
  10. rec1[1] >= rec2[3] ||
  11. rec1[3] <= rec2[1]) {
  12. temp = false;
  13. } else {
  14. temp = true;
  15. }
  16. return isRectangle(rec1) && isRectangle(rec2) && temp;
  17. };
var isRectangleOverlap = function(rec1, rec2) {
  if(rec1[2] <= rec2[0] || rec1[0] >= rec2[2] 
  || rec1[1] >= rec2[3] || rec1[3] <= rec2[1]) {
    return false
  }else {
    return true
  }
}