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^5?105 <= 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.pswp.cn/news/389758.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389758.shtml
英文地址,請注明出處:http://en.pswp.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.第一步是將我們的…