1.位置法
矩形1不和矩形2重叠只有四种情况,矩形1在矩形2的上方,下方,左方、右方
除此之外的情况,都是重叠。
代码如下:
class Solution {
public:
bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
return !(rec1[2] <= rec2[0] || // left
rec1[3] <= rec2[1] || // bottom
rec1[0] >= rec2[2] || // right
rec1[1] >= rec2[3]); // top
}
};
2.区域法
设重叠部分的矩形区域长度和宽度分别是width,height,只有两个都是正数才重叠
则当min(rec1[2],rec2[2])>max(rec1[0],rec2[0]),width>0
当min(rec1[3],rec2[3])>max(rec1[1],rec2[1]),height>0
代码如下:
class Solution {
public:
bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
return (min(rec1[2], rec2[2]) > max(rec1[0], rec2[0]) && // width > 0
min(rec1[3], rec2[3]) > max(rec1[1], rec2[1])); // height > 0
}
};