友情支持

如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜

支付宝

微信

有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

wx jikerizhi

公众号的微信号是: jikerizhi因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。

836. 矩形重叠

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

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

给出两个矩形 rec1rec2 。如果它们重叠,返回 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

  • -109 <= rec1[i], rec2[i] <= 109

  • rec1rec2 表示一个面积不为零的有效矩形

思路分析

一图胜千言:

0836 13
0836 10
0836 11
0836 12
有点 Merge Intervals 区间合并 的感觉。
  • 一刷

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
/**
 * @author D瓜哥 · https://www.diguage.com
 * @since 2026-07-27 23:03:45
 */
public boolean isRectangleOverlap(int[] a, int[] b) {
  // 投影到 x, y 轴上,画图理解
  int ax1 = a[0], ay1 = a[1], ax2 = a[2], ay2 = a[3];
  int bx1 = b[0], by1 = b[1], bx2 = b[2], by2 = b[3];
  return Math.max(ax1, bx1) < Math.min(ax2, bx2)
    && Math.max(ay1, by1) < Math.min(ay2, by2);
}