Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

836. 矩形重叠 #25

Open
yankewei opened this issue Mar 17, 2020 · 0 comments
Open

836. 矩形重叠 #25

yankewei opened this issue Mar 17, 2020 · 0 comments
Labels
数学 题目类型为数学 简单 题目难度为简单

Comments

@yankewei
Copy link
Owner

矩形以列表 [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 之间。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rectangle-overlap

解答

纯数学,没有什么好讲的,两个矩形交叉的条件太多,那我们可以取反,把不交叉的情况列出来即可。以rec2矩形为例,如果不予rec1矩形交叉,有四个情况:
1、rec2矩形的右边长在rec1矩形的左边长的左边 // rec2[2] <= rec1[0]
2、rec2矩形的下边长在rec1矩形的上边长的上边 // rec2[1] >= rec1[3]
3、rec2矩形的左边长在rec1矩形的右边长的右边 // rec2[0] >= rec1[2]
4、rec2矩形的上边长在rec1矩形的下边长的下边 // rec2[3] <= rec1[1]

func isRectangleOverlap(rec1 []int, rec2 []int) bool {
    return !(rec2[2] <= rec1[0] || rec2[1] >= rec1[3] || rec2[0] >= rec1[2] || rec2[3] <= rec1[1])
}
func main() {
     isRectangleOverlap([]int{0, 0, 2, 2}, []int{1, 1, 3, 3})
}
@yankewei yankewei added 简单 题目难度为简单 数学 题目类型为数学 labels Mar 17, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
数学 题目类型为数学 简单 题目难度为简单
Projects
None yet
Development

No branches or pull requests

1 participant