leetcode 根據身高重建佇列

2021-09-27 04:40:48 字數 1061 閱讀 1290

這一題,我當時真的沒想到乙個好的思路,比較簡潔,比較work的是思路,於是我看了答案;

題目:假設有打亂順序的一群人站成乙個佇列。 每個人由乙個整數對(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=0;於是我可以先排最高的,然後第二高的,看它的k是多少,如果為1則說明它在第一高的後面,否則,它在前面,依次類推;(請牢記,這是一種貪心演算法,即每一次都找最高的)

// 先按身高排序

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

// 再根據k的值進行插入,如果k!=0,則向比之前高的向後移k位。

// [7,0]

// [7,0], [7,1]

// [7,0], [6,1], [7,1]

// [5,0], [7,0], [6,1], [7,1]

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

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

這裡我的c++code,超過了99%,是因為我覺得這個演算法頻繁的插入,於是我就用了list,這樣大大減少了插入的時間;

class solution );

list> res;

res.push_back(people[0]);

int i=1;

for(;ii=0;

for(auto it:res)

people[i++]=it;

return people;

}};

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 根據身高重建佇列

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

《LeetCode筆記103》 根據身高重建佇列

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