算法提高之LeetCode刷题数据结构和算法分析

矩形重叠

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 好好工作,好好学习

上一篇下一篇

猜你喜欢

热点阅读