A rectangle is represented as a list [x1, y1, x2, y2]
, where (x1, y1)
are the coordinates of its bottom-left corner, and (x2, y2)
are the coordinates of its top-right corner.html
Two rectangles overlap if the area of their intersection is positive. To be clear, two rectangles that only touch at the corner or edges do not overlap.git
Given two (axis-aligned) rectangles, return whether they overlap.github
Example 1:post
Input: rec1 = [0,0,2,2], rec2 = [1,1,3,3] Output: true
Example 2:url
Input: rec1 = [0,0,1,1], rec2 = [1,0,2,1] Output: false
Notes:spa
rec1
and rec2
are lists of 4 integers.-10^9
and 10^9
.
这道题让咱们求两个矩形是不是重叠,矩形的表示方法是用两个点,左下和右上点来定位的。下面的讲解是参见网友大神jayesch的帖子来的,首先,返璞归真,在玩 2D 以前,先看下 1D 上是如何运做的。对于两条线段,它们相交的话能够是以下状况:code
x3 x4 |--------------| |--------------| x1 x2
咱们能够直观的看出一些关系: htm
x1 < x3 < x2 && x3 < x2 < x4blog
能够稍微化简一下:leetcode
x1 < x4 && x3 < x2
就算是调换个位置:
x1 x2 |--------------| |--------------| x3 x4
仍是能获得一样的关系:
x3 < x2 && x1 < x4
好,下面咱们进军 2D 的世界,实际上 2D 的重叠就是两个方向都同时知足 1D 的重叠条件便可。因为题目中说明了两个矩形的重合面积为正才算 overlap,就是说挨着边的不算重叠,那么两个矩形重叠主要有这四种状况:
1)两个矩形在矩形1的右上角重叠:
____________________x4,y4 | | _______|______x2,y2 | | |______|____________| | x3,y3 | |______________| x1,y1
知足的条件为:x1 < x4 && x3 < x2 && y1 < y4 && y3 < y2
2)两个矩形在矩形1的左上角重叠:
___________________ x4,y4 | | | _______|____________x2,y2 |___________|_______| | x3,y3 | | |___________________| x1,y1
知足的条件为:x3 < x2 && x1 < x4 && y1 < y4 && y3 < y2
3)两个矩形在矩形1的左下角重叠:
____________________x2,y2 | | _______|______x4,y4 | | |______|____________| | x1,y1 | |______________| x3,y3
知足的条件为:x3 < x2 && x1 < x4 && y3 < y2 && y1 < y4
4)两个矩形在矩形1的右下角重叠:
___________________ x2,y2 | | | _______|____________x4,y4 |___________|_______| | x1,y1 | | |___________________| x3,y3
知足的条件为:x1 < x4 && x3 < x2 && y3 < y2 && y1 < y4
仔细观察能够发现,上面四种状况的知足条件其实都是相同的,只不过顺序调换了位置,因此咱们只要一行就能够解决问题了,碉堡了。。。
class Solution { public: bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) { return rec1[0] < rec2[2] && rec2[0] < rec1[2] && rec1[1] < rec2[3] && rec2[1] < rec1[3]; } };
Github 同步地址:
https://github.com/grandyang/leetcode/issues/836
相似题目:
参考资料:
https://leetcode.com/problems/rectangle-overlap/
https://leetcode.com/problems/rectangle-overlap/discuss/132319/My-One-Line-C%2B%2B-Solution