1. 题目

我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域。

每个矩形用左下角的点和右上角的点的坐标来表示。例如, 一个单位正方形可以表示为 [1,1,2,2]。 ( 左下角的点的坐标为 (1, 1) 以及右上角的点的坐标为 (2, 2) )。

示例 1:
rectangles = [[1,1,3,3],[3,1,4,2],[3,2,4,4],[1,3,2,4],[2,3,3,4]
]
返回 true。5个矩形一起可以精确地覆盖一个矩形区域。

示例 2:
rectangles = [[1,1,2,3],[1,3,2,4],[3,1,4,2],[3,2,4,4]
]
返回 false。两个矩形之间有间隔,无法覆盖成一个矩形。

示例 3:
rectangles = [[1,1,3,3],[3,1,4,2],[1,3,2,4],[3,2,4,4]
]
返回 false。图形顶端留有间隔,无法覆盖成一个矩形。

示例 4:
rectangles = [[1,1,3,3],[3,1,4,2],[1,3,2,4],[2,2,4,4]
]
返回 false。因为中间有相交区域,虽然形成了矩形,但不是精确覆盖。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/perfect-rectangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • set 查找四个顶点,在set中,说明重叠删除,不在set中,加入set
  • 同时记录所有小矩形 面积之和 s,还有x,y的最大最小范围
  • 最后set中的顶点只能是四个角,且面积 s = (x_max - x_min)*(y_max - y_min)
class Solution {public:bool isRectangleCover(vector<vector<int>>& ret) {set<pair<int,int>> s;int x1 = INT_MAX, y1 = INT_MAX, x2 = INT_MIN, y2 = INT_MIN, area = 0;for(int i = 0; i < ret.size(); ++i){x1 = min(ret[i][0],x1);x2 = max(ret[i][2],x2);y1 = min(ret[i][1],y1);y2 = max(ret[i][3],y2);area += (ret[i][2]-ret[i][0])*(ret[i][3]-ret[i][1]);if(s.find({ret[i][0],ret[i][1]})==s.end())s.insert({ret[i][0],ret[i][1]});elses.erase({ret[i][0],ret[i][1]});if(s.find({ret[i][2],ret[i][3]})==s.end())s.insert({ret[i][2],ret[i][3]});elses.erase({ret[i][2],ret[i][3]});if(s.find({ret[i][0],ret[i][3]})==s.end())s.insert({ret[i][0],ret[i][3]});elses.erase({ret[i][0],ret[i][3]});if(s.find({ret[i][2],ret[i][1]})==s.end())s.insert({ret[i][2],ret[i][1]});elses.erase({ret[i][2],ret[i][1]});}if(s.size() !=4 || !s.count({x1,y1}) || !s.count({x1,y2}) || !s.count({x2,y1}) || !s.count({x2,y2}))return false;return area == (x2-x1)*(y2-y1);}
};

304 ms 26 MB

LeetCode 391. 完美矩形(set检查顶点+面积检查)相关推荐

  1. LeetCode 391. 完美矩形(扫描线) / 318. 最大单词长度乘积 / 563. 二叉树的坡度

    391. 完美矩形 2021.11.16 每日一题 题目描述 给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形.这 ...

  2. Java实现 LeetCode 391 完美矩形

    391. 完美矩形 我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域. 每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为 ...

  3. Leetcode 391.完美矩形

    完美矩形 我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域. 每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为 [1,1 ...

  4. 391 - 完美矩形问题

    完美矩形问题 我们有 N 个与坐标轴对齐的矩形, 其中N > 0, 判断它们是否能精确地覆盖一个矩形区域.每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为[1,1, ...

  5. ​LeetCode刷题实战391:完美矩形

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  6. ACMNO.47 矩形面积交(有图) 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

    题目描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴. 对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入 输入仅包含两行,每行描述一个矩形. 在每行中, ...

  7. [CV] Rotated IoU 计算旋转矩形之间的重叠面积

    [CV] Rotated IoU 计算旋转矩形之间的重叠面积 文章目录 [CV] Rotated IoU 计算旋转矩形之间的重叠面积 简介 旋转包围盒的编码方式 矢量的旋转公式 包围盒转化为角点 代码 ...

  8. 如何求两个向交矩形的交集的面积?

    http://blog.csdn.net/yanleigis/article/details/3158223 如何求两个相交矩形的交集的面积?  就是交接的公共部分面积? class Rectangl ...

  9. 【数据结构与算法】之深入解析“完美矩形”的求解思路与算法示例

    一.题目要求 给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形,这个矩形的左下顶点是 (xi, yi) ,右上顶点 ...

最新文章

  1. JavaScript--'data-'的用法(1)
  2. vijos 1006 晴天小猪历险记之Hill——数字三角形的终极变化
  3. [转移]安装 BugZilla 时 Perl 模块的安装
  4. 【待继续研究】解析信用评分模型的开发流程及检验标准(晕乎乎,看不懂~)
  5. Android 编译环境的依赖库安装
  6. GET和POST两种基本请求方法的区别(转载)
  7. sublime插件 TortioseSVN
  8. 助AI研究社群发出内建18种预先训练模型工具
  9. sql azure 语法_Azure中的新SQL数据仓库
  10. 用DataAdapter对象填充DataSet数据集。
  11. Linux bash shell递归函数
  12. C++习题 对象数组输入与输出
  13. 杭电计算机接口实验报告,杭电新闻
  14. selenium-对指定区域截图
  15. cityscape 数据集 mmsegmentation训练记录
  16. 如何在多个iOSapp里共享数据
  17. CoreText(四):行 CTLineRef
  18. 交流异步电机的Modelica模型
  19. maya绳子建模(包含插件)
  20. tdm的应用计算机,2021计算机考研备考知识:TDM时分复用技术

热门文章

  1. 【机器学习】交叉验证筛选参数K值和weight
  2. 【机器学习】opencv-人脸识别
  3. 机器学习之朴素贝叶斯算法的推理及相关知识总结
  4. red hat linux 远程,Red Hat Linux 远程桌面 – 如何设置
  5. jdbc mysql demo_JDBC_demo:java连接mysql过程
  6. s5pv210的中断源
  7. 十大经典算法 - 转载
  8. leetcode - Linked List Cycle
  9. struts-tiles学习笔记
  10. .net连接MYSQL数据库方法一