栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

P391完美矩形

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

P391完美矩形

题目在此;
给定每个小矩形的左下顶点和右上顶点,求解所有矩形是否完整构成了一个大的矩形。
能够构成大矩形的充要条件是:

  1. 锁定最外侧边界,最小的左下顶点与最大的右上顶点构成的大矩形的面积一定等于所有小矩形的面积,即:
  2. 满足上面的条件后,除去最外侧的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函数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/511365.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号