LeetCode 406 根據身高重建佇列 貪心

2021-10-04 14:24:44 字數 1031 閱讀 8220

假設有打亂順序的一群人站成乙個佇列。 每個人由乙個整數對(h, k)表示,其中h是這個人的身高,k是排在這個人前面且身高大於或等於h的人數。 編寫乙個演算法來重建這個佇列。

注意:

總人數少於1100人。

示例

輸入:[[

7,0]

,[4,

4],[

7,1]

,[5,

0],[

6,1]

,[5,

2]]輸出:[[

5,0]

,[7,

0],[

5,2]

,[6,

1],[

4,4]

,[7,

1]]

思路分析:貪心

可以想到用插入比較好解決,就是前面的 「順序序列「 怎麼構造的問題

如果身高較小的先做插入的話,那當出現需要身高高的插入的話可能出現原先正確插入的第 k 個位置變成了 k+1,顧此失彼

身高較高的先做插入,那顯然是身高用降序,個數用公升序,這時可以用陣列的下標來表示前面有多少個人來巧妙的插入

可以看圖來理解這個問題 根據身高重建佇列

class

solution

:def

reconstructqueue

(self, people: list[list[

int]])

-> list[list[

int]]:

ifnot people:

return

people.sort(key =

lambda x:

(-x[0]

, x[1]

))res =

for i in people:

res.insert(i[1]

, i)

return res

LeetCode 406 根據身高重建佇列

題目鏈結 題目描述 假設有打亂順序的一群人站成乙個佇列。每個人由乙個整數對 h,k 表示,其中h是這個人的身高,k是排在這個人前面且身高大於或等於h的人數。編寫乙個演算法來重建這個佇列。注意 總人數少於1100人。示例輸入 7,0 4,4 7,1 5,0 6,1 5,2 輸出 5,0 7,0 5,2...

leetcode406 根據身高重建佇列

參考 sort自定義函式 如果想讓元素按照公升序排序就返回p1p2 vectorint,int reconstructqueue vectorint,int people 按照第一位降序,第二位公升序排序 sort people.begin people.end comp vectorint,int...

leetcode 406 根據身高重建佇列

c 排序,然後插入。假設候選隊列為 a,已經站好隊的隊列為 b.從 a 裡挑身高最高的人 x 出來,插入到 b.因為 b 中每個人的身高都比 x 要高,因此 x 插入的位置,就是看 x 前面應該有多少人就行了。比如 x 前面有 5 個人,那 x 就插入到佇列 b 的第 5 個位置。class sol...