这道题,正向思维,那肯定是一堆的条件判断,小编根据不停的试错,发现有如下7种情况,
第二行的粉色到红色,属于渐变过程,有两种情况,分开讨论
根据上述7中情况:写了如下代码:
class Solution {
public:
bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
if(rec2[0] < rec1[2] && rec2[0] > rec1[0] && rec2[1] < rec1[3] && rec2[1] > rec1[1])
return true;
else if(rec2[2] < rec1[2] && rec2[2] > rec1[0] && rec2[3] < rec1[3] && rec2[3] > rec1[1])
return true;
else if(rec2[0] < rec1[2] && rec2[0] > rec1[0] && rec2[1] <= rec1[1] && rec2[3] > rec1[1])
return true;
else if(rec2[2] < rec1[2] && rec2[2] > rec1[0] && rec2[1] < rec1[3] && rec2[3] >= rec1[3])
return true;
else if(rec2[0] <= rec1[0] && rec2[1] <= rec1[1] && rec2[2] >= rec1[2] && rec2[3] >= rec1[3])
return true;
else if(rec2[1] <= rec1[3] && rec2[1] >= rec1[1] && rec2[0] <= rec1[0] && rec2[2] > rec1[0])
return true;
else if(rec2[3] <= rec1[3] && rec2[3] >= rec1[1] && rec2[0] < rec1[2] && rec2[2] >= rec1[2])
return true;
return false;
}
};
运行时间:4ms;
网上看过一个更优秀的解:
链接如下,运行时间3ms,而且只有一行代码,小编真是佩服至极。
https://www.cnblogs.com/king-3/p/9063963.html