鏈接
https://leetcode-cn.com/problems/rectangle-overlap/
耗時
解題:1 h+
題解:54 min
題意
給出兩個正放的矩形的左下角和右上角的座標,問兩個矩形是否相交,但只在角或邊接觸的兩個矩形不算。
思路
設第一個矩形左下角的座標爲(x1,y1),右上角的座標爲(x2,y2),第二個矩形左下角的座標爲(x3,y3),右上角的座標爲(x4,y4),如下圖所示。若兩正放的矩形相交,則必然其中一個矩形的豎邊在另一個矩形的兩個豎邊之間,即例如rec1的x1或x2在 (x3,x4) 之間(具體來說,,因爲若x1=x4 or x2=x3,則是兩個矩形只有邊或角接觸的),若已有rec1的一個豎邊在rec2的兩個豎邊之間,那麼除了rec1的上邊低於rec2的下邊或者rec1的下邊高於rec2的上邊都是相交的,即即可認爲兩矩形相交。而對於 rec2 的某一個豎邊在 rec1 的兩個豎邊之間的情況同理可得。除此之外,其餘情況均不可能相交。
AC代碼
class Solution {
public:
bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
int x1 = rec1[0];
int y1 = rec1[1];
int x2 = rec1[2];
int y2 = rec1[3];
int x3 = rec2[0];
int y3 = rec2[1];
int x4 = rec2[2];
int y4 = rec2[3];
if((x1 >= x3 && x1 < x4) || (x2 > x3 && x2 <= x4)) {
if(!(y1 > y4 || y2 < y3)) return true;
}
if((x3 >= x1 && x3 < x2) || (x4 > x1 && x4 <= x2)) {
if(!(y3 > y2 || y4 < y1)) return true;
}
return false;
}
};