題目:
假設有打亂順序的一群人站成一個隊列羊精。 每個人由一個整數對(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]]
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/queue-reconstruction-by-height
著作權歸領扣網絡所有浸卦。商業(yè)轉載請聯系官方授權,非商業(yè)轉載請注明出處案糙。
解答:
class Solution {
public int[][] reconstructQueue(int[][] peoples) {
Arrays.sort(peoples,(a,b)->a[0]==b[0]?a[1]-b[1]:b[0]-a[0]);
List<int[]> list = new LinkedList();
for(int[] people:peoples){
list.add(people[1],people);
}
return list.toArray(new int[peoples.length][]);
}
}
先從人里面挑出最高的限嫌,根據他們的k值進行排列。排完后时捌,再從剩下的人里挑出最高的怒医,根據k值插入到剛剛排好的隊列里,直到沒有人還沒排奢讨。所以這里直接先將人根據身高從高到低進行排序稚叹。
這里比較 tricky 的就是當你把最高的人挑出來后,再將下次挑出來的人插入到之前排好的隊列時拿诸,k 代表的就是索引值入录。