[题记]矩形重叠-leetcode(#我的博客第一篇)

题目: 矩形重叠

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

 

提示:

  1. 两个矩形 rec1 和 rec2 都以含有四个整数的列表的形式给出。
  2. 矩形中的所有坐标都处于 -10^9 和 10^9 之间。
  3. x 轴默认指向右,y 轴默认指向上。
  4. 你可以仅考虑矩形是正放的情况。

 

推翻了自己的很多种想法,无奈看了一下评论区的大佬,顿时毛瑟顿开。

 

  我们可以对题目实行“降维打击”,如果我们只关注x轴和y轴,那么两个矩形则变成了两条线段。

那么不重叠的两个矩形必然满足两个条件:

  1. 左边矩形的最右面 <= 右边矩形的最左边:即 rec1[2] <= rec2[0] || rec2[2] <= rec1[0];
  2. 下面矩形的最上面 <= 上面矩形的最下面: 即 rec1[3] <= rec2[1] || rec2[3] <= rec1[0];

只要符合这两条,那么这两个矩形就不会相交。

由此得出代码:

bool isRectangleOverlap(int* rec1, int rec1Size, int* rec2, int rec2Size){
 
if((rec1[2] <= rec2[0] || rec2[2] <= rec1[0])||(rec1[3] <= rec2[1] || rec2[3] <= rec1[0])) return false;//不重叠 return true; //重叠 }

 

2020-03-18-21:34:53

我的第一篇博客

posted @ 2020-03-18 21:39  橙橙橙澄xs  阅读(106)  评论(0编辑  收藏  举报