类似:LeetCode第 223 题:矩形面积(C++)_zj-CSDN博客
但是
class Solution {
public:
bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
if(rec1[0] >= rec2[2] || rec1[1] >= rec2[3] || rec1[2] <= rec2[0] || rec1[3] <= rec2[1]) return false;
return true;
}
};
这样并不行,这个用例:
[-1,0,1,1]
[0,-1,0,1]
会发现第二个矩形就是一条直线。。。所以判断一下特殊情况:
class Solution {
public:
bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
if(rec1[0] >= rec2[2] || rec1[1] >= rec2[3] || rec1[2] <= rec2[0] || rec1[3] <= rec2[1]) return false;
if(rec1[0] == rec1[2] || rec1[1] == rec1[3] || rec2[1] == rec2[3] || rec2[0] == rec2[2]) return false;
return true;
}
};
或者这样:
return min(rec1[2], rec2[2]) - max(rec1[0], rec2[0]) > 0 && min(rec1[3], rec2[3]) - max(rec1[1], rec2[1]) > 0;
上面这样的理解是考虑重叠区域(如果有)的四个边界,那必然是上边界 > 下边界,右边界 > 左边界。