- 个人博客:https://javaniuniu.com/
- 难度:
简单
- 本题涉及算法:
- 思路:
检查位置
检查区域
- 类似题型:
题目 矩形重叠
矩形以列表 [x1, y1, x2, y2]
的形式表示,其中 (x1, y1)
为左下角的坐标,(x2, y2)
是右上角的坐标。
如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。
给出两个矩形,判断它们是否重叠并返回结果
解题思路一 三种情况
-
- rec1[0]>=rec2[2] 不可能相交
-
- rec1[2]<=rec2[0] 不可能相交
-
- x轴相交情况下 在判断 y 轴 y轴也有三种情况 判断方法一样
代码
python
class Solution(object):
def isRectangleOverlap(self, rec1, rec2):
"""
:type rec1: List[int]
:type rec2: List[int]
:rtype: bool
"""
if rec1[0]>=rec2[2] or rec1[2]<=rec2[0]:
return False
else:
if rec1[1]>=rec2[3] or rec1[3]<=rec2[1]:
return False
else:
return True
java
class Solution {
public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
return !(rec1[2] <= rec2[0] || // left
rec1[3] <= rec2[1] || // bottom
rec1[0] >= rec2[2] || // right
rec1[1] >= rec2[3]); // top
}
}
解题思路二 检查区域
- 当
min(rec1[2], rec2[2]) > max(rec1[0], rec2[0])
时,这两条线段有交集 - 同理可以得到,当
min(rec1[3], rec2[3]) > max(rec1[1], rec2[1])
时,这两条线段有交集
class Solution {
public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
return (Math.min(rec1[2], rec2[2]) > Math.max(rec1[0], rec2[0]) &&
Math.min(rec1[3], rec2[3]) > Math.max(rec1[1], rec2[1]));
}
}