[LeetCode] 836. Rectangle Overlap 矩形重叠

 

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

  1. Both rectangles rec1 and rec2 are lists of 4 integers.
  2. All coordinates in rectangles will be between -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

 

相似题目:

Rectangle Area

 

参考资料:

https://leetcode.com/problems/rectangle-overlap/

https://leetcode.com/problems/rectangle-overlap/discuss/132319/My-One-Line-C%2B%2B-Solution

https://leetcode.com/problems/rectangle-overlap/discuss/133175/C%2B%2B-Solution-with-easy-explanation

 

LeetCode All in One 题目讲解汇总(持续更新中...)

相关文章
相关标签/搜索