题目描述:

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

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

给出两个矩形,判断它们是否重叠并返回结果。

示例:

输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
输出:true
输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]
输出:false

解题思路:

第一种(考虑边界值):

思路:我们可以在平面建一个坐标系,画出 rec2 的矩形,坐标分别为(rec2[0], rec2[1], rec2[2], rec2[3]),现在我们考虑不重叠情况。当 rec1 和 rec2 不发生重叠时,rec1 可以在 rec2 的 上、下、左、右。这里以左边为例(其他别思路相同):当 rec1 在 rec2 的左边时,rec1 右上角的 x 坐标(即:rec1[2])应该小于等于 rec2 的左下角的 x 坐标(即:rec2[0]), 表达式为:rec1[2] <= rec2[0]。其他方向思路相同。

rec1[2] <= rec2[0]   # 左侧
rec1[0] >= rec2[2] # 右侧
rec1[1] >= rec2[3] # 上侧
rec1[3] <= rec2[1] # 下侧

代码:

from typing import List
def isRectangleOverlap(rec1: List[int], rec2: List[int]) -> bool:
return not (
rec1[2] <= rec2[0] or
rec1[0] >= rec2[2] or
rec1[1] >= rec2[3] or
rec1[3] <= rec2[1]
)

print(isRectangleOverlap(rec1 = [0,0,2,2], rec2 = [1,1,3,3]))  # True

第二种(考虑重叠):

思路:画上一个平面坐标系,将 rec1 和 rec2 的矩形的部分面积相重叠,将两个矩形的 “左下角” “右上角” 的坐标投射到 x、y轴上,可以看到在 x 、y轴上,两者会有交集。由数学知识可得,当 min(rec1[2], rec2[2]) > max(rec1[0], rec2[0]) 时,在x轴上有交集,当 min(rec1[3], rec2[3]) > max(rec1[1], rec2[1]) 时,在y轴上右交集。

代码:

from typing import List

def isRectangleOverlap(rec1: List[int], rec2: List[int]) -> bool:
return (min(rec1[2], rec2[2]) > max(rec1[0], rec2[0])
and min(rec1[3], rec2[3]) > max(rec1[1], rec2[1]))
print(isRectangleOverlap(rec1 = [0,0,2,2], rec2 = [1,1,3,3]))  # True

LeetCode-矩形重叠的更多相关文章

  1. [LeetCode] Rectangle Overlap 矩形重叠

    A rectangle is represented as a list [x1, y1, x2, y2], where (x1, y1) are the coordinates of its bot ...

  2. leetcode 签到 836. 矩形重叠

    836. 矩形重叠 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标. 如果相交的面积为正,则称两矩形重叠.需要明确的 ...

  3. LeetCode 836. 矩形重叠

    题目链接:https://leetcode-cn.com/problems/rectangle-overlap/ 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左 ...

  4. Java实现 LeetCode 836 矩形重叠(暴力)

    836. 矩形重叠 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标. 如果相交的面积为正,则称两矩形重叠.需要明确的 ...

  5. [Swift]LeetCode836. 矩形重叠 | Rectangle Overlap

    A rectangle is represented as a list [x1, y1, x2, y2], where (x1, y1) are the coordinates of its bot ...

  6. [LeetCode] 矩形面积

    题目链接: https://leetcode-cn.com/problems/rectangle-area 难度:中等 通过率:41.3% 题目描述: 在 二维 平面上计算出两个 由直线构成的 矩形重 ...

  7. libgdx判断矩形重叠碰撞

    有两种方式. 1. 排除法,排除四种不可能重叠的情况就是了. public static boolean IsOverlap( Rectangle rect1, Rectangle rect2 ){ ...

  8. hdu2056 矩形重叠面积(水题)

    题意:       给你两个矩形,问你他们的重叠面积是多少. 思路:      这两个矩形是平行x和y轴的,所以水题,不解释. #include<stdio.h> typedef stru ...

  9. hdu1255 扫描线,矩形重叠面积(两次以上)

    题意:       给你n个矩形,然后问你这n个矩形所组成的画面中被覆盖至少两次的面积有多大. 思路:       和1542差距并不是很大,大体上还是离散化+线段树扫面线,不同的地方就是这个题目要求 ...

  10. 218. The Skyline Problem *HARD* -- 矩形重叠

    A city's skyline is the outer contour of the silhouette formed by all the buildings in that city whe ...

随机推荐

  1. LeetCode Day 10

    LeetCode0020 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序 ...

  2. android greendao的外部封装不太友好。

    https://github.com/greenrobot/greenDAO 下载下官网的示例,有完整的封装版本,但自已封装是碰到很多问题. 因greenDao的Master和Session中很多方法 ...

  3. SpringMVC学习笔记四:SimpleMappingExceptionResolver异常处理

    SpringMVC的异常处理,SimpleMappingExceptionResolver只能简单的处理异常 当发生异常的时候,根据发生的异常类型跳转到指定的页面来显示异常信息 ExceptionCo ...

  4. github常用命令汇总

    创立版本库 mkdir Baiducd Baidugit init SSHssh-keygen -t -rsa -C "TaylorApril947939@gmail"(在gith ...

  5. TNS-04612: "orcl--117-118" 的 RHS 为空

    安装数据库时,TNS-04612: "orcl--117-118" 的 RHS 为空 解决办法: 把 D:\app\xxx\product\11.2.0\dbhome_1\NETW ...

  6. 统一管理jar包版本

    <!-- 统一管理jar包版本 --> <properties> <spring.version>5.0.2.RELEASE</spring.version& ...

  7. 面试的绝招(V1.0)

    <软件自动化测试开发>出版了 测试开发公开课培训大讲堂 微信公众号:测试开发社区 测试开发QQ群:173172133 咨询QQ:7980068 咨询微信:zouhui1003it

  8. 给你的Kubernetes集群建一个只读账户(防止高管。。。后)

    给你的Kubernetes集群建一个只读账户 需求:我们知道搭完k8s集群会创建一个默认的管理员kubernetes-admin用户该用户拥有所以权限,有一天开发或测试的同学需要登录到k8s集群了解业 ...

  9. 探究Java中的引用

    探究Java中的四种引用 从JDK1.2版本开始,Java把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用.本篇就来详细探究 ...

  10. 7-11 jmu-python-分段函数&数学函数 (15 分)

    本题要求计算下列分段函数f(x)的值(x为从键盘输入的一个任意实数): 输入格式: 直接输入一个实数x 输出格式: 在一行中按“f(x)=result”的格式输出,其中x与result都保留三位小数. ...