LeetCode406 根據身高重建佇列

2021-10-10 14:16:22 字數 1359 閱讀 1244

題目

假設有打亂順序的一群人站成乙個佇列。 每個人由乙個整數對 (h, k) 表示,其中 h 是這個人的身高,k 是應該排在這個人前面且身高大於或等於 h 的人數。 例如:[5,2] 表示前面應該有 2 個身高大於等於 5 的人,而 [5,0] 表示前面不應該存在身高大於等於 5 的人。

編寫乙個演算法,根據每個人的身高 h 重建這個佇列,使之滿足每個整數對 (h, k) 中對人數 k 的要求。

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

輸出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

**
先對輸入陣列排序,h公升序,k降序 從頭迴圈遍歷 當前這個人就是剩下未安排的人中最矮的人,他的k值就代表他在剩餘空位的索引值 如果有多個人高度相同,要按照k值從大到小領取索引值 示例:

[ 0, 1, 2, 3, 4, 5 ] [ 4, 4 ] 4

[ 0, 1, 2, 3, 5 ]  [ 5, 2 ] 2

[ 0, 1, 3, 5 ]   [ 5, 0 ] 0

[ 1, 3, 5 ]    [ 6, 1 ] 3

[ 1, 5 ]      [ 7, 1 ] 5

[ 1 ]      [ 7, 0 ] 1

[ [ 5, 0 ], [ 7, 0 ], [ 5, 2 ], [ 6, 1 ], [ 4, 4 ], [ 7, 1 ] ]

class

solution

:def

reconstructqueue

(self, people: list[list[

int]])

-> list[list[

int]]:

people.sort(key=

lambda x:

(x[0],

-x[1])

) n =

len(people)

ans =[[

]for _ in

range

(n)]

for person in people:

spaces = person[1]

+1for i in

range

(n):

ifnot ans[i]

: spaces -=

1if spaces ==0:

ans[i]

= person

break

return ans

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...