矩形重叠
2020-03-18 本文已影响0人
_阿南_
题目:
矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。
如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。
给出两个矩形,判断它们是否重叠并返回结果。
示例 1:
输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
输出:true
示例 2:
输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]
输出:false
说明:
两个矩形 rec1 和 rec2 都以含有四个整数的列表的形式给出。
矩形中的所有坐标都处于 -10^9 和 10^9 之间。
题目的理解:
尝试了好多种方式:
(1)使用顶点判断。存在边包含的问题,大矩形包含小矩形的问题。 失败
(2)去除rec2最外面的一个边框判断。存在rec2比rec1大的问题。 失败
(3)使用群举法将rec1和rec2中的所有点取出并保存在set数组A和B中,判断A和B是否有交集。 存在内存过大的问题。失败
(4)去除rec2最外面的一个边框判断, 联合去除rec1最外面的一个边框判断。存在当4个点都不存在包含关系的问题。 失败
(5)rec1的边框和rec2第二层边框的交集。存在rec1包含rec2的问题。 存在超出内存范围的问题。失败
(6)rec2的左下角坐标必须在rec1的右上角坐标以内,rec2的右上角左边必须在rec1的左下角坐标以内。 成功
python实现
class Solution:
def isRectangleOverlap(self, rec1: List[int], rec2: List[int]) -> bool:
if rec2[0] < rec1[2] and rec2[1] < rec1[3] and rec2[2] > rec1[0] and rec2[3] > rec1[1]:
return True
return False
提交
哭天啊,把题目想的太复杂了,原来是那么简单的一个判断题啊,哭晕在天际
// END 好好工作,好好学习