矩形以列表 [x1, y1, x2, y2]
的形式表示,其中 (x1, y1)
为左下角的坐标,(x2, y2)
是右上角的坐标。
如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。
给出两个矩形,判断它们是否重叠并返回结果。
示例 1:
输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3] 输出:true
示例 2:
输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1] 输出:false
说明:
- 两个矩形
rec1
和rec2
都以含有四个整数的列表的形式给出。 - 矩形中的所有坐标都处于
-10^9
和10^9
之间
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
if((rec1[0] >= rec2[0]) && (rec1[0] < rec2[2]))
{
if((rec1[1] >= rec2[1]) && (rec1[1] < rec2[3]))
return 1;
if((rec1[3] > rec2[1]) && (rec1[3] <= rec2[3]))
return 1;
if((rec2[1] >= rec1[1]) && (rec2[1] < rec1[3]))
return 1;
if((rec2[3] > rec1[1]) && (rec2[3] <= rec1[3]))
return 1;
}
if((rec1[2] > rec2[0]) && (rec1[2] <= rec2[2]))
{
if((rec1[1] >= rec2[1]) && (rec1[1] < rec2[3]))
return 1;
if((rec1[3] > rec2[1]) && (rec1[3] <= rec2[3]))
return 1;
if((rec2[1] >= rec1[1]) && (rec2[1] < rec1[3]))
return 1;
if((rec2[3] > rec1[1]) && (rec2[3] <= rec1[3]))
return 1;
}
if((rec2[0] >= rec1[0]) && (rec2[0] < rec1[2]))
{
if((rec1[1] >= rec2[1]) && (rec1[1] < rec2[3]))
return 1;
if((rec1[3] > rec2[1]) && (rec1[3] <= rec2[3]))
return 1;
if((rec2[1] >= rec1[1]) && (rec2[1] < rec1[3]))
return 1;
if((rec2[3] > rec1[1]) && (rec2[3] <= rec1[3]))
return 1;
}
if((rec2[2] > rec1[0]) && (rec2[2] <= rec1[2]))
{
if((rec1[1] >= rec2[1]) && (rec1[1] < rec2[3]))
return 1;
if((rec1[3] > rec2[1]) && (rec1[3] <= rec2[3]))
return 1;
if((rec2[1] >= rec1[1]) && (rec2[1] < rec1[3]))
return 1;
if((rec2[3] > rec1[1]) && (rec2[3] <= rec1[3]))
return 1;
}
return 0;
}
};
int main(int argc, _TCHAR* argv[])
{
int NumArray1[4] = {5,15,8,18};
int NumArray2[4] = {0,3,7,9};
int ArrayIndex = 0;
bool result = 0;
Solution a;
vector<int> RectVector1;
vector<int> RectVector2;
while(ArrayIndex < 4)
{
RectVector1.push_back(NumArray1[ArrayIndex]);
RectVector2.push_back(NumArray2[ArrayIndex]);
ArrayIndex++;
}
result = a.isRectangleOverlap(RectVector1, RectVector2);
cout << "result =" << result << endl;
system("pause");
return 0;
}