题目在此;
给定每个小矩形的左下顶点和右上顶点,求解所有矩形是否完整构成了一个大的矩形。
能够构成大矩形的充要条件是:
- 锁定最外侧边界,最小的左下顶点与最大的右上顶点构成的大矩形的面积一定等于所有小矩形的面积,即:
- 满足上面的条件后,除去最外侧的4个顶点,其余所有的顶点出现次数一定为偶数。
因此我们在遍历rectangles 数组时统计所有小矩形的面积和,并记录最小的左下顶点和最大的右上顶点,同时对每出现一次的顶点用map统计出现次数。在满足条件1的情况下,减去边缘的4个顶点,其余顶点出现次数都能%2即可。
代码:
class Solution {
public:
typedef pairPair;
bool isRectangleCover(vector>& rectangles) {
int L,D,R,U;
mapm;
int sum=0;
L =D = INT_MAX, R = U = INT_MIN;
for(auto&r:rectangles){
int x,y,a,b;
x=r[0],y=r[1],a=r[2],b=r[3];
sum+=(a-x)*(b-y);
m[{x,y}]++;
m[{a,b}]++;
m[{x,b}]++;
m[{a,y}]++;
L=min(L,x);
D=min(D,y);
R=max(a,R);
U=max(U,b);
}
if(sum!=(R-L)*(U-D)) return false;
m[{L,U}]-=1;
m[{L,D}]-=1;
m[{R,U}]-=1;
m[{R,D}]-=1;
for(auto&p:m){
if(p.second&2!=0) return false;
}
return true;
}
};
贴一下pair和map函数用法:
pair函数
map函数



