力扣 根據身高重建佇列

2021-10-11 17:52:56 字數 1953 閱讀 3096

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

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

力扣:406. 根據身高重建佇列

輸入: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]] 是重新構造後的佇列。

本題有兩個維度,h 和 k,如果按照 k 來從小到大排序,會發現 k 的排列並不符合條件,身高 h 也不符合條件,兩個維度都沒確定下來;如果按照身高 h 來排序,從大到小排(身高相同k小的站前面),讓高個子在前面,此時前面的節點一定都比本節點高。

因此可得出排序的條件:

1、身高 h 從大到小排序

2、身高相等時,按照 k 從小到大排序

以上輸入為例,排序後得到 [ [ 7 , 0 ] , [ 7 , 1 ] , [ 6 , 1 ] , [ 5 , 0 ] , [ 5 , 2 ] , [ 4, 4 ] ]

接下來需要考慮前面比自己高的人數 k , 會發現如果按照身高高的 people 的 k 來插入, 後序插入的節點也不會影響前面已經插入好的節點。

例如插入過程:

插入[ 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 ] ]

ac**:

class

solution

else

return p2[0]

- p1[0]

;// p1[0] == p2[0] ? p1[1] - p2[1] : p2[0] - p1[0];})

;// 2. 按照 k 插入

list<

int[

]> list =

newlinkedlist

<

>()

;for

(int

person : people)

return list.

toarray

(people);}

}

根據身高重建佇列

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

LeetCode 根據身高重建佇列

題目如下 假設有打亂順序的一群人站成乙個佇列。每個人由乙個整數對 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 ...

leetcode 根據身高重建佇列

這一題,我當時真的沒想到乙個好的思路,比較簡潔,比較work的是思路,於是我看了答案 題目 假設有打亂順序的一群人站成乙個佇列。每個人由乙個整數對 h,k 表示,其中h是這個人的身高,k是排在這個人前面且身高大於或等於h的人數。編寫乙個演算法來重建這個佇列。注意 總人數少於1100人 輸入 7,0 ...