精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日日夜夜精品视频| 国产免费一区二区三区免费视频| 久久国产精品免费精品3p| 午夜电影久久久| 久久精品国产精品青草色艺| 国语对白做受69按摩| 国产精品久久久久9999赢消| 欧美v国产在线一区二区三区| 国模吧无码一区二区三区| av二区在线| 国产精品中文欧美| 国产成人免费av电影| 国产黄色的视频| 成人在线视频中文字幕| 欧美日韩在线精品一区二区三区激情| 男女啪啪的视频| 日本在线视频1区| 黄色小说综合网站| 国产成人综合久久| 国产稀缺真实呦乱在线| 97精品一区| 亚洲男人天堂手机在线| av免费观看不卡| 免费成人高清在线视频| 精品久久久久久久久久| 91免费视频黄| 摸摸摸bbb毛毛毛片| 亚瑟国产精品| 91高清视频免费看| 91丨porny丨探花| 成人看av片| 国产精品青草久久| 免费亚洲精品视频| 蜜臀久久久久久999| 久久99国产精品久久99果冻传媒| 奇米一区二区三区四区久久| 久久精品这里只有精品| 外国成人免费视频| 最近2019年手机中文字幕 | 18啪啪污污免费网站| 日韩精品免费一区二区夜夜嗨 | 希岛爱理av一区二区三区| 亚洲精品一区久久久久久| 中国一级特黄录像播放| 日韩高清在线观看一区二区| 在线播放91灌醉迷j高跟美女| 免费日韩中文字幕| 日韩伦理在线| 欧美日韩国产综合视频在线观看中文 | 亚洲黄色在线观看视频| 精品一二三四区| 国产精品视频一区二区高潮| 精品久久久久久久久久久久久久久久久久| 中国女人久久久| 国内精品久久久久久久久| 538精品在线观看| 在线观看日韩| 欧美黄色片在线观看| 久久久91视频| 一本久道久久久| 91av国产在线| 日韩免费av网站| 日本亚洲一区二区| 国产女人精品视频| 国产伦精品一区二区三区免.费 | 亚洲国产精品无码久久久久高潮 | 亚洲欧美日韩直播| 法国伦理少妇愉情| 波多野结衣一区| 久久久精品视频在线观看| 亚洲国产成人精品综合99| 中文字幕乱码亚洲无线精品一区 | 亚洲国产天堂| 日韩欧美一级在线播放| 亚洲色图欧美日韩| 国产麻豆一区二区三区精品视频| 一区二区成人av| 我要看一级黄色录像| 亚洲精品久久久| 久久免费视频这里只有精品| 国产精品视频123| 蜜臀国产一区二区三区在线播放| 91欧美精品成人综合在线观看| 草逼视频免费看| 99久久er热在这里只有精品15| 美日韩免费视频| 日韩黄色影院| 亚洲综合无码一区二区| av免费在线播放网站| 欧美天堂一区二区| 精品国产一区二区三区久久久蜜月| 好吊一区二区三区视频| 四虎国产精品免费观看| 久久乐国产精品| 艳妇乳肉豪妇荡乳av无码福利| 精品无码三级在线观看视频| 韩日午夜在线资源一区二区| 日本不卡在线| 一区二区三区欧美久久| 男女曰b免费视频| 日韩精品一级| 国产一区二区三区久久精品 | 国产精品一区二区三区精品 | **欧美大码日韩| 男女视频网站在线观看| 亚洲精品伊人| 亚洲人免费视频| 国产亚洲成人av| 男人的天堂久久精品| 国产一区二区精品在线| 欧美jizz18hd性欧美| 偷拍一区二区三区四区| 午夜不卡福利视频| 国产成人调教视频在线观看 | 久久黄色小视频| 青青青爽久久午夜综合久久午夜 | 性感美女一级片| 亚洲精品成人在线| 黄色aaa级片| 日韩高清成人在线| 久久久久成人网| 国产美女主播在线观看| 久久久久88色偷偷免费| 人妻无码久久一区二区三区免费| 伊人久久大香| 一区二区三区回区在观看免费视频| 久久精品一级片| 国产又粗又猛又爽又黄91精品| 欧美亚洲另类在线一区二区三区| av美女在线观看| 日韩欧美一区二区三区在线| 国产suv精品一区二区68| 日本欧美在线观看| 欧美三级网色| 国产精品av一区二区三区| 亚洲国产97在线精品一区| 欧美黑人一级片| 国产一二精品视频| youjizz.com亚洲| 日本免费成人| zzjj国产精品一区二区| 在线观看av大片| 国产精品免费久久| 网站一区二区三区| 日韩国产一区二区| 国产精品丝袜久久久久久高清 | 99久久国产宗和精品1上映| 日韩成人午夜| 69av视频在线播放| 丝袜视频国产在线播放| 欧美性videos高清精品| 播金莲一级淫片aaaaaaa| 免费日韩精品中文字幕视频在线| 明星裸体视频一区二区| 在线看片福利| 亚洲香蕉av在线一区二区三区| 欧美日韩a v| 国产精品网曝门| 午夜精品免费看| 亚洲欧美亚洲| 国产亚洲精品自在久久| 日本在线高清| 亚洲人午夜精品免费| 中文字幕在线网址| 亚洲精品网站在线观看| 岛国精品一区二区三区| 中文亚洲字幕| 日韩中文字幕一区二区| 四虎影视国产精品| 欧美黑人xxxⅹ高潮交| 凸凹人妻人人澡人人添| 在线一区二区观看| 国产传媒免费在线观看| 成人在线视频一区| 久久美女福利视频| 日韩在线看片| 国产精品亚洲一区| 久久天堂av| 美日韩在线视频| 婷婷丁香花五月天| 欧美探花视频资源| 久久综合亚洲色hezyo国产| 91麻豆国产自产在线观看| 国产视频一区二区视频| 一区二区三区国产精华| 国产一区在线免费| 欧美日韩视频免费看| 欧美极品少妇与黑人| 免费在线观看污视频| 欧美高清性hdvideosex| 欧美亚韩一区二区三区| 欧美国产日韩精品免费观看| 国产伦精品一区二区三区妓女下载| 亚洲美女黄网| 伊人久久大香线蕉av一区| 国产精品1luya在线播放| 国产精品久久久久高潮| 黄色影院在线看| 中文字幕欧美日韩在线| 色婷婷av一区二区三| 欧美日韩中文一区| 99精品视频99| 亚洲人成人一区二区在线观看| 久久偷拍免费视频| 国产一区二区精品久久| 成人黄色片视频| 亚洲无线一线二线三线区别av| 日韩一区不卡| 亚洲欧洲av| 国产美女精品在线观看| av在线播放一区二区| 国产91色在线免费| av中文字幕在线看| 九九久久久久久久久激情| 成a人v在线播放| 亚洲精品一区二区久| 亚洲黄色a级片| 3751色影院一区二区三区| 天天综合久久综合| 色香蕉久久蜜桃| 国产做受高潮漫动| 亚洲综合免费观看高清完整版在线| 亚洲色图日韩精品| 久久午夜羞羞影院免费观看| 日本道中文字幕| 国产ts人妖一区二区| 99精品视频国产| 人禽交欧美网站| 日韩免费高清在线| 亚洲综合另类| 国产原创popny丨九色| 激情欧美日韩| 久久久久久久9| 欧美fxxxxxx另类| 久久久久久久免费视频| 亚洲成人精选| 女同性恋一区二区| 亚洲精品国产偷自在线观看| 精品日韩在线播放| 欧美国产高潮xxxx1819| 中国 免费 av| 欧美高清日韩| 亚洲 欧美 综合 另类 中字| 韩日精品在线| 黄色一级片在线看| 一本久道久久综合婷婷鲸鱼| 国产极品在线视频| 亚洲欧美大片| 女人另类性混交zo| 日本成人中文字幕在线视频 | www.com国产| 欧美视频在线观看 亚洲欧| 综合激情网五月| 色999日韩国产欧美一区二区| 在线观看日本网站| 欧美在线观看禁18| 国产又粗又黄又爽的视频| 欧美欧美午夜aⅴ在线观看| 国产精品欧美激情在线| 日韩一区二区三区观看| 日本美女一级视频| 亚洲精品有码在线| av一区在线观看| 久久亚洲影音av资源网| 欧美xxxx少妇| 91超碰caoporn97人人| 欧美黑人粗大| 亚洲a在线观看| 美女视频亚洲色图| 青娱乐一区二区| 亚洲美女视频| 免费av手机在线观看| 美女诱惑黄网站一区| 中文字幕av专区| 高清免费成人av| 国产精品无码午夜福利| 国产精品久久久久久久浪潮网站| 亚洲熟女www一区二区三区| 精品福利在线看| 最新在线中文字幕| 日韩女优制服丝袜电影| 免费黄色在线视频网站| 久久精品国产综合| 国产伦理精品| 成人激情在线播放| 秋霞综合在线视频| 一区二区免费电影| 91久久在线| 最新国产黄色网址| 91麻豆产精品久久久久久| 亚洲欧美另类日本| 欧美日韩国产精品一区| 11024精品一区二区三区日韩| 欧美精品一区视频| 1024视频在线| 97精品国产91久久久久久| 丁香久久综合| 精品国产乱码久久久久久108| 成人在线免费小视频| 国产男女免费视频| 精品一区二区免费视频| 三叶草欧洲码在线| 一区二区三区鲁丝不卡| 中文字幕一区二区人妻| 亚洲国产成人精品一区二区 | 欧美日韩激情| 18禁网站免费无遮挡无码中文| 久久精品国产精品青草| 搡老熟女老女人一区二区| 亚洲免费看黄网站| 中国一级特黄视频| 精品性高朝久久久久久久| 婷婷在线播放| 成人黄色免费片| 欧洲乱码伦视频免费| 国产美女网站在线观看| 国产成人在线视频网址| 成年人网站在线观看视频| 日本久久电影网| 亚洲av电影一区| 久久久久久久久电影| 91成人精品观看| 午夜免费电影一区在线观看| 久久激情网站| 双性尿奴穿贞c带憋尿| 亚洲综合久久久| 999久久久久| 久久精品99久久香蕉国产色戒| 91tv亚洲精品香蕉国产一区| 欧美少妇一区| 三级欧美在线一区| 精品中文字幕在线播放| 亚洲国产一区二区三区| www久久久久久| 欧美精品在线极品| 亚洲精品在线a| 欧美做暖暖视频| 国产精品一区二区久久不卡| 黄色录像一级片| 欧美日韩成人综合| 免费超碰在线| 亚洲一区二区久久久久久| 国产精品久久久久久久免费观看| 日日干夜夜操s8| 国产精品亲子伦对白| 国产又大又黑又粗| 久久在线免费观看视频| 激情五月综合婷婷| 成人高清dvd| 成人自拍视频在线| 日产欧产va高清| 亚洲精品日韩久久久| 欧美日韩视频免费观看| 色综合久久88色综合天天提莫| 日本午夜一区二区| 中文字幕观看av| 日韩一区二区免费视频| 男女视频在线| 精品国产中文字幕| 玖玖国产精品视频| 99在线视频免费| 337p亚洲精品色噜噜| 牛牛精品在线视频| 久久伦理网站| 免费精品视频在线| 全网免费在线播放视频入口| 欧美mv和日韩mv国产网站| 理论片午夜视频在线观看| 欧美日韩日本网| 狠狠狠色丁香婷婷综合激情| 欧美成人一区二区三区高清| 日韩av一区二区在线观看| 色婷婷综合久久久中字幕精品久久| 亚洲视频精品一区| 大胆亚洲人体视频| 国产伦精品一区二区三区视频网站| 中文字幕日韩欧美在线视频| 欧美午夜在线播放| 国产在线青青草| 中文字幕一区二区三区四区| 欧美少妇bbw| 国产精品久久久久久久久久久久久 | 成人免费毛片app| 日韩精品在线一区二区三区| 欧美成人亚洲成人| 女优一区二区三区| 午夜免费福利网站| 欧美性猛交xxxx乱大交3| 男人天堂久久久| 久久国产一区二区| 久久99九九99精品| 天天操天天爽天天干| 日韩视频免费看| 秋霞影院一区二区三区| 亚洲视频在线不卡| 欧美午夜激情在线| 手机av在线播放| 亚洲国产精品日韩| 91在线视频18| 亚洲AV无码乱码国产精品牛牛|