题意:
矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。
矩形的上下边平行于 x 轴,左右边平行于 y 轴。
如果相交的面积为 正 ,则称两矩形重叠。
需要明确的是,只在角或边接触的两个矩形不构成重叠。
给出两个矩形 rec1 和 rec2 。如果它们重叠,返回 true;否则,返回 false 。
数据范围:
rect1.length == 4
rect2.length == 4
-1e9 <= rec1[i], rec2[i] <= 1e9
rec1[0] <= rec1[2] 且 rec1[1] <= rec1[3]
rec2[0] <= rec2[2] 且 rec2[1] <= rec2[3]
解法:
如果其中一个矩形面积为0,那么return 0.
如果两个矩形有交集,那么在x轴上和y轴上的投影也都会有交集.
只需要判断投影是否都有交集即可.
code:
class Solution {
public:
bool isRectangleOverlap(vector<int>& a, vector<int>& b) {
if(a[0]==a[2]||a[1]==a[3]||b[0]==b[2]||b[1]==b[3])return 0;
if(a[2]<=b[0]||a[0]>=b[2])return 0;
if(a[3]<=b[1]||a[1]>=b[3])return 0;
return 1;
}
};