假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(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值升序排序,这样若当前人插到第ki个位置时,前边正好有ki个人不比他低,如果有比他低的人插在他前边也不会影响到他。
class Solution {
public int[][] reconstructQueue(int[][] people) {
Arrays.parallelSort(people,(o1,o2)->o1[0]==o2[0]?o1[1]-o2[1]:o2[0]-o1[0]);
LinkedList<int[]> list=new LinkedList<>();
for(int[] i : people)
list.add(i[1],i);
return list.toArray(new int[list.size()][2]);
}
}
|