精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何根據身高重建隊列,你學會了嗎?

網絡 通信技術
假設有打亂順序的一群人站成一個隊列,數組 people 表示隊列中一些人的屬性(不一定按順序)。每個 people[i] = [hi, ki] 表示第 i 個人的身高為 hi ,前面 正好 有 ki 個身高大于或等于 hi 的人。

[[436919]]

https://leetcode-cn.com/problems/queue-reconstruction-by-height

假設有打亂順序的一群人站成一個隊列,數組 people 表示隊列中一些人的屬性(不一定按順序)。每個 people[i] = [hi, ki] 表示第 i 個人的身高為 hi ,前面 正好 有 ki 個身高大于或等于 hi 的人。

請你重新構造并返回輸入數組 people 所表示的隊列。返回的隊列應該格式化為數組 queue ,其中 queue[j] = [hj, kj] 是隊列中第 j 個人的屬性(queue[0] 是排在隊列前面的人)。

示例 1:

  • 輸入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
  • 輸出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
  • 解釋:
    • 編號為 0 的人身高為 5 ,沒有身高更高或者相同的人排在他前面。
    • 編號為 1 的人身高為 7 ,沒有身高更高或者相同的人排在他前面。
    • 編號為 2 的人身高為 5 ,有 2 個身高更高或者相同的人排在他前面,即編號為 0 和 1 的人。
    • 編號為 3 的人身高為 6 ,有 1 個身高更高或者相同的人排在他前面,即編號為 1 的人。
    • 編號為 4 的人身高為 4 ,有 4 個身高更高或者相同的人排在他前面,即編號為 0、1、2、3 的人。
    • 編號為 5 的人身高為 7 ,有 1 個身高更高或者相同的人排在他前面,即編號為 1 的人。
    • 因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新構造后的隊列。

示例 2:

  • 輸入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]
  • 輸出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]

提示:

  • 1 <= people.length <= 2000
  • 0 <= hi <= 10^6
  • 0 <= ki < people.length

題目數據確保隊列可以被重建

思路

本題有兩個維度,h和k,看到這種題目一定要想如何確定一個維度,然后在按照另一個維度重新排列。

其實如果大家認真做了135. 分發糖果,就會發現和此題有點點的像。

在135. 分發糖果我就強調過一次,遇到兩個維度權衡的時候,一定要先確定一個維度,再確定另一個維度。

如果兩個維度一起考慮一定會顧此失彼。

對于本題相信大家困惑的點是先確定k還是先確定h呢,也就是究竟先按h排序呢,還先按照k排序呢?

如果按照k來從小到大排序,排完之后,會發現k的排列并不符合條件,身高也不符合條件,兩個維度哪一個都沒確定下來。

那么按照身高h來排序呢,身高一定是從大到小排(身高相同的話則k小的站前面),讓高個子在前面。

此時我們可以確定一個維度了,就是身高,前面的節點一定都比本節點高!

那么只需要按照k為下標重新插入隊列就可以了,為什么呢?

以圖中{5,2} 為例:

根據身高重建隊列

按照身高排序之后,優先按身高高的people的k來插入,后序插入節點也不會影響前面已經插入的節點,最終按照k的規則完成了隊列。

所以在按照身高從大到小排序后:

  • 局部最優:優先按身高高的people的k來插入。插入操作過后的people滿足隊列屬性
  • 全局最優:最后都做完插入操作,整個隊列滿足題目隊列屬性

局部最優可推出全局最優,找不出反例,那就試試貪心。

一些同學可能也會疑惑,你怎么知道局部最優就可以推出全局最優呢?有數學證明么?

在貪心系列開篇詞關于貪心算法,你該了解這些!中,我已經講過了這個問題了。

刷題或者面試的時候,手動模擬一下感覺可以局部最優推出整體最優,而且想不到反例,那么就試一試貪心,至于嚴格的數學證明,就不在討論范圍內了。

如果沒有讀過關于貪心算法,你該了解這些!的同學建議讀一下,相信對貪心就有初步的了解了。

回歸本題,整個插入過程如下:

排序完的people:[[7,0], [7,1], [6,1], [5,0], [5,2],[4,4]]

插入的過程:

  • 插入[7,0]:[[7,0]]
  • 插入[7,1]:[[7,0],[7,1]]
  • 插入[6,1]:[[7,0],[6,1],[7,1]]
  • 插入[5,0]:[[5,0],[7,0],[6,1],[7,1]]
  • 插入[5,2]:[[5,0],[7,0],[5,2],[6,1],[7,1]]
  • 插入[4,4]:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]

此時就按照題目的要求完成了重新排列。

C++代碼如下:

  1. // 版本一 
  2. class Solution { 
  3. public
  4.     static bool cmp(const vector<int> a, const vector<int> b) { 
  5.         if (a[0] == b[0]) return a[1] < b[1]; 
  6.         return a[0] > b[0]; 
  7.     } 
  8.     vector<vector<int>> reconstructQueue(vector<vector<int>>& people) { 
  9.         sort (people.begin(), people.end(), cmp); 
  10.         vector<vector<int>> que; 
  11.         for (int i = 0; i < people.size(); i++) { 
  12.             int position = people[i][1]; 
  13.             que.insert(que.begin() + position, people[i]); 
  14.         } 
  15.         return que; 
  16.     } 
  17. }; 
  • 時間復雜度O(nlogn + n^2)
  • 空間復雜度O(n)

但使用vector是非常費時的,C++中vector(可以理解是一個動態數組,底層是普通數組實現的)如果插入元素大于預先普通數組大小,vector底部會有一個擴容的操作,即申請兩倍于原先普通數組的大小,然后把數據拷貝到另一個更大的數組上。

所以使用vector(動態數組)來insert,是費時的,插入再拷貝的話,單純一個插入的操作就是O(n^2)了,甚至可能拷貝好幾次,就不止O(n^2)了。

改成鏈表之后,C++代碼如下:

  1. // 版本二 
  2. class Solution { 
  3. public
  4.     // 身高從大到小排(身高相同k小的站前面) 
  5.     static bool cmp(const vector<int> a, const vector<int> b) { 
  6.         if (a[0] == b[0]) return a[1] < b[1]; 
  7.         return a[0] > b[0]; 
  8.     } 
  9.     vector<vector<int>> reconstructQueue(vector<vector<int>>& people) { 
  10.         sort (people.begin(), people.end(), cmp); 
  11.         list<vector<int>> que; // list底層是鏈表實現,插入效率比vector高的多 
  12.         for (int i = 0; i < people.size(); i++) { 
  13.             int position = people[i][1]; // 插入到下標為position的位置 
  14.             std::list<vector<int>>::iterator it = que.begin(); 
  15.             while (position--) { // 尋找在插入位置 
  16.                 it++; 
  17.             } 
  18.             que.insert(it, people[i]); 
  19.         } 
  20.         return vector<vector<int>>(que.begin(), que.end()); 
  21.     } 
  22. }; 
  • 時間復雜度O(nlogn + n^2)
  • 空間復雜度O(n)

大家可以把兩個版本的代碼提交一下試試,就可以發現其差別了!

關于本題使用數組還是使用鏈表的性能差異,我在貪心算法:根據身高重建隊列(續集)中詳細講解了一波

總結

關于出現兩個維度一起考慮的情況,我們已經做過兩道題目了,另一道就是135. 分發糖果。

其技巧都是確定一邊然后貪心另一邊,兩邊一起考慮,就會顧此失彼。

這道題目可以說比135. 分發糖果難不少,其貪心的策略也是比較巧妙。

最后我給出了兩個版本的代碼,可以明顯看是使用C++中的list(底層鏈表實現)比vector(數組)效率高得多。

對使用某一種語言容器的使用,特性的選擇都會不同程度上影響效率。

所以很多人都說寫算法題用什么語言都可以,主要體現在算法思維上,其實我是同意的但也不同意。

對于看別人題解的同學,題解用什么語言其實影響不大,只要題解把所使用語言特性優化的點講出來,大家都可以看懂,并使用自己語言的時候注意一下。

對于寫題解的同學,刷題用什么語言影響就非常大,如果自己語言沒有學好而強調算法和編程語言沒關系,其實是會誤傷別人的。

這也是我為什么統一使用C++寫題解的原因,其實用其他語言java、python、php、go啥的,我也能寫,我的Github上也有用這些語言寫的小項目,但寫題解的話,我就不能保證把語言特性這塊講清楚,所以我始終堅持使用最熟悉的C++寫題解。 

而且我在寫題解的時候涉及語言特性,一般都會后面加上括號說明一下。沒辦法,認真負責就是我,哈哈。

本文轉載自微信公眾號「代碼隨想錄」,可以通過以下二維碼關注。轉載本文請聯系代碼隨想錄公眾號。

 

責任編輯:武曉燕 來源: 代碼隨想錄
相關推薦

2024-01-19 08:25:38

死鎖Java通信

2023-07-26 13:11:21

ChatGPT平臺工具

2024-02-04 00:00:00

Effect數據組件

2023-01-10 08:43:15

定義DDD架構

2024-07-11 11:17:00

消息隊列Java

2022-11-30 09:54:57

網絡令牌身份驗證

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2024-01-05 07:46:15

JS克隆對象JSON

2022-11-23 14:57:04

2022-08-29 08:05:44

Go類型JSON

2023-03-17 16:44:44

Channel進程模型

2023-01-28 10:40:56

Java虛擬機代碼

2024-11-29 08:53:46

2023-01-30 09:01:54

圖表指南圖形化

2022-07-08 09:27:48

CSSIFC模型

2024-08-06 09:47:57

2024-05-06 00:00:00

InnoDBView隔離

2023-10-10 11:04:11

Rust難點內存

2024-07-31 08:39:45

Git命令暫存區
點贊
收藏

51CTO技術棧公眾號

自拍偷拍亚洲色图欧美| 国产999视频| 久久久久亚洲AV成人网人人小说| 成人在线高清免费| 97久久超碰精品国产| 国产精品久久久久77777| www.av免费| 黄色成人美女网站| 欧美在线观看一区二区| 欧美日韩dvd| 国产黄色片在线观看| 国内久久婷婷综合| 91爱视频在线| 久久国产波多野结衣| 国产精品丝袜在线播放| 欧美日韩一级二级三级| 韩日视频在线观看| 最新真实国产在线视频| 成人av资源站| 成人激情在线观看| 成年人av网站| 欧美激情视频一区二区三区在线播放| 日韩电影大全免费观看2023年上 | 国产高清视频在线| 国产福利一区二区三区视频在线| 日本精品视频在线观看| 久久国产精品波多野结衣| 欧洲美女日日| 亚洲精品国产精品国产自| 日本一二三四区视频| 中文字幕在线高清| 香蕉久久一区二区不卡无毒影院| 亚洲欧美一二三| 国产三级电影在线观看| 91免费小视频| 国产精品乱码视频| 国产suv一区二区| 蜜臀av一级做a爰片久久| 三上悠亚激情av一区二区三区| 免费人成精品欧美精品| 91成人在线观看国产| 久久久精品人妻一区二区三区四| 天天影视欧美综合在线观看| 一本一本久久a久久精品牛牛影视| 亚洲一区二区乱码| 精品深夜福利视频| 欧美成人性福生活免费看| 99re6在线观看| 成人亚洲综合| 在线观看不卡一区| 日韩av播放器| 国产精品迅雷| 日本道色综合久久| 可以免费在线看黄的网站| 涩涩网在线视频| 精品国产乱码久久久久久天美| 草b视频在线观看| 福利成人导航| 污片在线观看一区二区| 鲁一鲁一鲁一鲁一色| 色综合桃花网| 一本大道久久a久久精品综合| 国产原创中文在线观看| 超级白嫩亚洲国产第一| 偷窥少妇高潮呻吟av久久免费| 国产69精品久久久久久久| 国产99re66在线视频| 精品美女国产在线| 蜜臀av午夜一区二区三区 | 又紧又大又爽精品一区二区| 国产美女视频免费| www国产在线观看 | 波多野结衣av一区二区全免费观看 | 激情综合一区二区三区| 亚洲精品日韩av| 亚洲爱情岛论坛永久| 成人国产视频在线观看| 久久久久久久久久久一区| 蝌蚪视频在线播放| 17c精品麻豆一区二区免费| 手机在线视频你懂的| 国产三级伦理在线| 欧美色欧美亚洲高清在线视频| 黄色三级视频片| 在线免费观看亚洲| 精品久久久久久久久久久久包黑料 | 黄色片视频免费| 蜜桃一区二区三区在线| 91中文字幕一区| 特黄视频在线观看| 国产精品人人做人人爽人人添| 在线观看一区二区三区三州| 久草成色在线| 在线视频综合导航| 中文字幕乱码在线人视频| 日韩av中文字幕一区| 色偷偷噜噜噜亚洲男人| av资源吧首页| 久久久国产精品一区二区中文| 成人精品视频在线| 少妇精品高潮欲妇又嫩中文字幕| 亚洲国产成人午夜在线一区| 亚洲熟妇无码av在线播放| 波多野结衣久久精品| 欧美福利视频导航| 欧美性生交xxxxx| 成人免费av| 欧美精品videofree1080p| 久久久久久无码午夜精品直播| 韩国精品在线观看| 欧美一二三区| 狂野欧美性猛交xxxxx视频| 欧美制服丝袜第一页| 日本精品一二三| 国产高清一区| 日本老师69xxx| www.五月激情| 日韩毛片精品高清免费| 一本色道无码道dvd在线观看| 亚洲综合网狠久久| 日韩中文字幕精品| 免费观看日批视频| 99久久久久久99| 亚洲av首页在线| 精品176极品一区| 亚洲精品资源美女情侣酒店| 黄色香蕉视频在线观看| 日韩成人精品在线| 蜜桃久久精品乱码一区二区| 羞羞电影在线观看www| 9191国产精品| 亚洲一二三四视频| 丝袜美腿亚洲综合| 久久99九九| av免费不卡国产观看| 日韩欧美卡一卡二| 中文国语毛片高清视频| 全国精品久久少妇| 日本午夜精品电影| 国产 日韩 欧美一区| 日韩精品福利在线| 亚洲第一精品在线观看 | 欧美色偷偷大香| 一级黄色片大全| 久久精品欧洲| 久久伊人资源站| 美女露胸视频在线观看| 亚洲精品一区二区三区在线观看| 青娱乐在线视频免费观看| 国产美女精品一区二区三区| 亚洲一区三区| 成人在线视频www| 久久精品美女视频网站| 国产又粗又长又大视频| 亚洲人成亚洲人成在线观看图片| 最新免费av网址| 欧美91大片| 超碰97网站| www.超碰在线| 精品亚洲永久免费精品| 四虎影院在线免费播放| 日本一二三四高清不卡| 欧美又黄又嫩大片a级| 亚洲影视一区二区三区| 成人av片网址| 乡村艳史在线观看| 国产亚洲福利一区| 中文字幕第三页| 亚洲免费观看在线观看| 国产一级黄色录像| 久久精品亚洲| 亚洲国产精品日韩| 精品一区二区三区中文字幕| 久久久久久久国产精品| 天堂中文在线资| 欧美亚洲一区二区在线观看| 五月综合色婷婷| 国产suv精品一区二区883| 中文字幕日本最新乱码视频| 久操成人av| 国产日韩在线一区| 秋霞在线午夜| 亚洲人成网站免费播放| 91片黄在线观看喷潮| 亚洲图片一区二区| 亚洲精品国产熟女久久久| 激情成人午夜视频| 天天夜碰日日摸日日澡性色av| 国产精品中文字幕亚洲欧美| 91麻豆桃色免费看| 交100部在线观看| 中文字幕久久久| 免费观看成年人视频| 欧美优质美女网站| 久久久99精品| 国产精品污网站| 美女黄色一级视频| 六月丁香婷婷色狠狠久久| 日本精品久久久久久久久久| jvid福利在线一区二区| 国产一区在线观| 欧美黄页免费| 88xx成人精品| a篇片在线观看网站| 亚洲免费中文字幕| 精品国产亚洲AV| 在线精品视频免费播放| 国产性生活网站| 中文字幕精品一区| 第四色在线视频| 国产一区二区三区视频在线播放| 久久精品一区二| 欧美网站在线| 一区二区日本伦理| 小嫩嫩12欧美| 国产精品12| 91精品福利观看| 日本精品久久久久久久| 俺来俺也去www色在线观看| 日韩中文字幕精品| av亚洲在线| 日韩av一卡二卡| 亚洲毛片在线播放| 欧美高清hd18日本| 在线观看免费中文字幕| 日韩欧美aaa| 日韩欧美中文字幕一区二区| 亚洲色图视频网站| 日韩在线一卡二卡| 久久精品亚洲一区二区三区浴池| 色婷婷精品久久二区二区密| 国产成人自拍高清视频在线免费播放| 色婷婷成人在线| 日韩黄色在线观看| 狠狠爱免费视频| 一区二区三区国产在线| av在线观看地址| 国精品一区二区三区| avove在线观看| 91成人精品视频| 伊人久久青草| 999国产精品永久免费视频app| 先锋影音亚洲资源| 欧美日韩第一| 一区二区精品国产| 视频在线不卡免费观看| 亚洲欧洲一区二区| 色乱码一区二区三区网站| 亚洲二区三区四区| 色欧美自拍视频| 手机成人av在线| 亚州av乱码久久精品蜜桃 | 99综合在线| 欧美老熟妇喷水| 香蕉国产精品偷在线观看不卡| 看av免费毛片手机播放| 久久久久久一区二区| 中文字幕永久视频| 美腿丝袜在线亚洲一区| 182午夜视频| 国产剧情av麻豆香蕉精品| 性高潮久久久久久| 9人人澡人人爽人人精品| 日本xxx在线播放| 国产亚洲制服色| 亚洲精品自拍视频在线观看| 最近日韩中文字幕| 久久亚洲成人av| 精品国产福利视频| 国产又粗又猛又爽又| 在线不卡欧美精品一区二区三区| 精品国精品国产自在久不卡| 精品视频久久久久久久| 岛国最新视频免费在线观看| 久久精品国产亚洲精品| 青春草视频在线观看| 国产91对白在线播放| 成人午夜亚洲| 国产成人成网站在线播放青青 | 日韩福利视频在线观看| 国产日韩精品在线看| 久久天天躁狠狠躁夜夜爽蜜月| cao在线视频| 国产高清视频一区三区| 国产一区二区三区视频在线| 国内精品二区| 日韩欧美在线中字| 黄色a级片免费看| 天堂蜜桃一区二区三区| 国产又粗又长又爽又黄的视频| 99免费精品视频| 99国产精品无码| 午夜欧美2019年伦理| 中文字幕人妻丝袜乱一区三区 | 亚洲女则毛耸耸bbw| 国产亚洲婷婷免费| 欧美三级小视频| 在线观看欧美黄色| 精品国产一级片| 在线观看91久久久久久| av男人的天堂在线观看| 成人免费看片视频| 深爱激情综合| 美女黄色免费看| 精品一区二区三区影院在线午夜| 日本一区二区在线免费观看| 中文字幕在线播放不卡一区| av中文在线播放| 欧美电影免费提供在线观看| 春暖花开成人亚洲区| 久久久久久中文字幕| 日本午夜精品久久久久| 欧美午夜精品久久久久久蜜| 国产精品99一区二区| 欧美精品 - 色网| 欧美激情综合五月色丁香小说| 自拍偷拍欧美亚洲| 日韩欧美一区中文| 国内精品久久久久国产| 国产成人拍精品视频午夜网站| 国产一区二区三区亚洲| 91传媒免费视频| 国产真实乱偷精品视频免| 欧美a在线播放| 色婷婷久久久综合中文字幕| 黄色一级大片在线免费看国产一| 久久精品视频播放| 开心久久婷婷综合中文字幕| 青青成人在线| 亚洲综合99| 99久久人妻精品免费二区| 亚洲永久免费视频| 亚洲第一精品网站| 久久视频精品在线| 亚洲欧洲二区| 亚洲一区二区三区加勒比 | 免费在线稳定资源站| 国产做受69高潮| 成人高潮视频| 国产一线二线三线女| 福利一区二区在线| 久久久久无码国产精品| 日韩精品一区二区三区在线| 91亚洲天堂| 91久久中文字幕| 欧美日韩免费| 久草福利在线观看| 亚洲国产人成综合网站| 风流老熟女一区二区三区| 久久免费视频这里只有精品| 国产精品99久久免费观看| 男人的天堂狠狠干| 99久久伊人网影院| 性色av免费观看| 在线观看精品国产视频| xxxxx.日韩| 在线观看免费黄色片| 国产aⅴ综合色| 国内免费精品视频| 国产手机视频精品| 四虎4545www精品视频| 亚洲日本japanese丝袜| 国产一区二三区| 国产一级在线视频| 亚洲免费视频观看| 国产精品字幕| 中文字幕日韩精品一区二区| 国产精品99久久不卡二区| 亚洲精品77777| 亚洲丝袜在线视频| 亚洲天堂网站| 91动漫在线看| 久久久国产精品午夜一区ai换脸| 中文字幕码精品视频网站| 久久成人精品视频| 麻豆一区一区三区四区| 精品免费国产一区二区| 国产精品电影一区二区三区| 亚洲av无码国产精品永久一区| 91精品国产91久久| 999国产精品视频| 在线天堂www在线国语对白| 在线免费观看一区| 2024最新电影免费在线观看| 蜜桃网站成人| 激情综合色综合久久综合| 日韩精品国产一区二区| 中文字幕亚洲欧美日韩在线不卡| 网站一区二区| 久草综合在线观看| 一区二区三区加勒比av| 欧美伦理影视网| http;//www.99re视频| 久久成人一区| 黑人巨大精品一区二区在线| 亚洲精品视频网上网址在线观看| 国产美女精品视频免费播放软件| 鲁一鲁一鲁一鲁一澡| 亚洲视频中文字幕| 色视频免费在线观看|