391. 完美矩形

391. 完美矩形

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

如果所有矩形一起精确覆盖了某个矩形区域,则返回 true ;否则,返回 false 。

示例 1:

image.png
输入:rectangles = [[1,1,3,3],[3,1,4,2],[3,2,4,4],[1,3,2,4],[2,3,3,4]]
输出:true
解释:5 个矩形一起可以精确地覆盖一个矩形区域。
示例 2:
image.png

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

image.png

输入:rectangles = [[1,1,3,3],[3,1,4,2],[1,3,2,4],[3,2,4,4]]
输出:false
解释:图形顶端留有空缺,无法覆盖成一个矩形。
示例 4:

image.png

输入:rectangles = [[1,1,3,3],[3,1,4,2],[1,3,2,4],[2,2,4,4]]
输出:false
解释:因为中间有相交区域,虽然形成了矩形,但不是精确覆盖。

提示:

  • 1 <= rectangles.length <= 2 * 10410^4104
  • rectangles[i].length == 4
  • −105-10^5105 <= xi, yi, ai, bi <= 10510^5105

解题思路

首先所有矩形需要组合成一个大的正常矩形,因此矩形之间不能存在空缺。并且因为矩形之间如果存在相交区域,虽然形成了矩形,但就不是精确覆盖了。

  1. 因此我们需要保证所有小矩形加起来的面积等于大矩形
  2. 其次如果我们要保证没有重叠的部分,就需要统计每个顶点出现的次数,除了大矩形的四个顶点以外,每个顶点只能出现2次或者4次。如下图所示,如果出现了重叠的部分,那么就会出现出现次数为1的顶点
    image.png

因此,在算法中,我们需要统计每个小矩形顶点的出现次数和其面积,只有当其满足上述两个条件,才能实现精准覆盖

代码

typedef pair<int, int> point;class Solution {
public:bool isRectangleCover(vector<vector<int>> &rectangles) {map<point, int> m;long long area(0);int min_x1(rectangles[0][0]),min_y1(rectangles[0][1]),max_y2(rectangles[0][3]),max_x2(rectangles[0][2]);for (auto p:rectangles) {int x1 = p[0], y1 = p[1], x2 = p[2], y2 = p[3];min_x1=min(x1,min_x1);min_y1=min(y1,min_y1);max_x2=max(x2,max_x2);max_y2=max(y2,max_y2);m[{x1,y1}]+=1;m[{x1,y2}]+=1;m[{x2,y1}]+=1;m[{x2,y2}]+=1;area+=abs(x1-x2)*abs(y1-y2);}point p1{min_x1,min_y1},p2{min_x1,max_y2},p3{max_x2,min_y1},p4{max_x2,max_y2};if ((long long )abs(min_x1-max_x2)*(long long )abs(max_y2-min_y1)!=area||!m.count(p1)||!m.count(p2)||!m.count(p3)||!m.count(p4))return false;m.erase(p1);m.erase(p2);m.erase(p3);m.erase(p4);for(auto item:m){if (item.second!=2&&item.second!=4)return false;}return true;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/389758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bigquery 教程_bigquery挑战实验室教程从数据中获取见解

bigquery 教程This medium article focusses on the detailed walkthrough of the steps I took to solve the challenge lab of the Insights from Data with BigQuery Skill Badge on the Google Cloud Platform (Qwiklabs). I got access to this lab in the Google Cloud R…

学习linux系统到底有没捷径?

2019独角兽企业重金招聘Python工程师标准>>> 说起linux操作系&#xff0c;可能对于很多不了解的人来说&#xff0c;第一个想到的就是类似于黑客帝国中的黑框框以及一串串不知所云的代码&#xff0c;总之这些感觉都可以总结成为一个字&#xff0c;那就是——酷&#…

机器学习之路:python k近邻回归 预测波士顿房价

python3 学习机器学习api 使用两种k近邻回归模型 分别是 平均k近邻回归 和 距离加权k近邻回归 进行预测 git: https://github.com/linyi0604/MachineLearning 代码&#xff1a; 1 from sklearn.datasets import load_boston2 from sklearn.cross_validation import train_test_…

大话数据结构 (程杰 著)

1转载于:https://www.cnblogs.com/revoid/p/9605734.html

wxpython实现界面跳转

wxPython实现Frame之间的跳转/更新的一种方法 wxPython是Python中重要的GUI框架&#xff0c;下面通过自己的方法实现模拟类似PC版微信登录&#xff0c;并跳转到主界面&#xff08;朋友圈&#xff09;的流程。 &#xff08;一&#xff09;项目目录 【说明】 icon : 保存项目使用…

java职业技能了解精通_如何通过精通数字分析来提升职业生涯的发展,第8部分...

java职业技能了解精通Continuing from the seventh article in this series, we are going to explore ways to present data. Over the past few years, Marketing and SEO field has become more data-driven than in the past thanks to tools like Google Webmaster Tools …

2028. 找出缺失的观测数据

2028. 找出缺失的观测数据 现有一份 n m 次投掷单个 六面 骰子的观测数据&#xff0c;骰子的每个面从 1 到 6 编号。观测数据中缺失了 n 份&#xff0c;你手上只拿到剩余 m 次投掷的数据。幸好你有之前计算过的这 n m 次投掷数据的 平均值 。 给你一个长度为 m 的整数数组 …

51nod 1250 排列与交换——dp

题目&#xff1a;http://www.51nod.com/onlineJudge/questionCode.html#!problemId1250 仔细思考dp。 第一问&#xff0c;考虑已知 i-1 个数有多少种方案。再放入一个数&#xff0c;它是最大的且在最后面&#xff0c;所以它的位置不同的话&#xff0c;就是不同的方案。它在特定…

BZOJ.1024.[SCOI2009]生日快乐(记忆化搜索)

题目链接 搜索&#xff0c;枚举切的n-1刀。 对于长n宽m要切x刀&#xff0c;可以划分为若干个 长n宽m要切x刀 的子问题&#xff0c;对所有子问题的答案取max 对所有子问题的方案取min 就是当前状态答案。 这显然是会有很多重复状态的&#xff0c;用map记忆化(长宽都是double)。 …

kfc流程管理炸薯条几秒_炸薯条成为数据科学的最后前沿

kfc流程管理炸薯条几秒In February, our Data Science team had an argument about which restaurant we went to made the best French Fry.2月&#xff0c;我们的数据科学团队对我们去哪家餐厅做得最好的炸薯条产生了争议。 We decided to make it a competition throughout…

XSS理解与防御

一、说明 我说我不理解为什么别人做得出来我做不出来&#xff0c;比如这里要说的XSS我觉得很多人就不了解其定义和原理的&#xff0c;在不了解定义和原理的背景下他们可以拿站&#xff0c;这让人怎么理解呢。那时我最怕两个问题&#xff0c;第一个是题目做得怎么样第二个是你能…

Java大数

转自&#xff1a;https://www.cnblogs.com/zufezzt/p/4794271.html import java.util.*; import java.math.*; public class Main{public static void main(String args[]){Scanner cin new Scanner(System.in);BigInteger a, b;//以文件EOF结束while (cin.hasNext()){a cin.…

2027. 转换字符串的最少操作次数

2027. 转换字符串的最少操作次数 给你一个字符串 s &#xff0c;由 n 个字符组成&#xff0c;每个字符不是 ‘X’ 就是 ‘O’ 。 一次 操作 定义为从 s 中选出 三个连续字符 并将选中的每个字符都转换为 ‘O’ 。注意&#xff0c;如果字符已经是 ‘O’ &#xff0c;只需要保持…

bigquery_到Google bigquery的sql查询模板,它将您的报告提升到另一个层次

bigqueryIn this post, we’re sharing report templates that you can build with SQL queries to Google BigQuery data.在本文中&#xff0c;我们将分享您可以使用SQL查询为Google BigQuery数据构建的报告模板。 First, you’ll find out about what you can calculate wit…

分类树/装袋法/随机森林算法的R语言实现

原文首发于简书于[2018.06.12] 本文是我自己动手用R语言写的实现分类树的代码&#xff0c;以及在此基础上写的袋装法&#xff08;bagging&#xff09;和随机森林&#xff08;random forest&#xff09;的算法实现。全文的结构是&#xff1a; 分类树 基本知识predginisplitrules…

数据科学学习心得_学习数据科学时如何保持动力

数据科学学习心得When trying to learn anything all by yourself, it is easy to lose motivation and get thrown off track.尝试自己学习所有东西时&#xff0c;很容易失去动力并偏离轨道。 In this article, I will provide you with some tips that I used to stay focus…

用php当作cat使用

今天&#xff0c;本来是想敲 node test.js 执行一下&#xff0c;test.js文件&#xff0c;结果 惯性的敲成了 php test.js, 原文输出了 test.js的内容。 突然觉得&#xff0c;这东西 感觉好像是 cat 命令&#xff0c;嘿嘿&#xff0c;以后要是ubuntu 上没装 cat &#xff0c; …

建信01. 间隔删除链表结点

建信01. 间隔删除链表结点 给你一个链表的头结点 head&#xff0c;每隔一个结点删除另一个结点&#xff08;要求保留头结点&#xff09;。 请返回最终链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出: [1,3] 解释&#xff1a; 蓝色结点为删除的结点…

python安装Crypto:NomodulenamedCrypto.Cipher

python 安装Crypto时出现的错误:NomodulenamedCrypto.Cipher 首先直接pip install Crypto 这时会在lib/site-packages/ 文件夹下生成crypto文件夹&#xff0c;将其重命名为Crypto ...然而这个文件夹下没有Cipher模块&#xff0c;还需要pip安装一个pycrypto&#xff0c;不过wind…

python多项式回归_在python中实现多项式回归

python多项式回归Video Link影片连结 You can view the code used in this Episode here: SampleCode您可以在此处查看 此剧 集中使用的代码&#xff1a; SampleCode 导入我们的数据 (Importing our Data) The first step is to import our data into python.第一步是将我们的…