目标
矩形以列表 [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]
输出:true
示例 2:
输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]
输出:false
示例 3:
输入:rec1 = [0,0,1,1], rec2 = [2,2,3,3]
输出:false
说明:
- rect1.length == 4
- rect2.length == 4
- -10^9 <= rec1[i], rec2[i] <= 10^9
- rec1 和 rec2 表示一个面积不为零的有效矩形
思路
使用数组 [x1, y1, x2, y2] 表示一个矩形的 左下 (x1, y1) 与 右上 (x2, y2) 顶点。给出两个数组 rec1 与 rec2,判断它们是否重叠。
如果两个矩形重叠,那么两个矩形在两个坐标轴方向的投影区间都应该相交。
代码
/**
* @date 2026-09-14 9:08
*/
public class IsRectangleOverlap836 {
public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
int x1 = rec1[0], x3 = rec2[0];
int y1 = rec1[1], y3 = rec2[1];
int x2 = rec1[2], x4 = rec2[2];
int y2 = rec1[3], y4 = rec2[3];
return !(x2 <= x3 || x4 <= x1) && !(y2 <= y3 || y4 <= y1);
}
}
性能
