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], [6,1], [4,4], [7,1]]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/queue-reconstruction-by-height
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答:

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 list = new LinkedList();
        for(int[] people:peoples){
            list.add(people[1],people);
        }
        return list.toArray(new int[peoples.length][]);
    }
}

先从人里面挑出最高的,根据他们的k值进行排列。排完后,再从剩下的人里挑出最高的,根据k值插入到刚刚排好的队列里,直到没有人还没排。所以这里直接先将人根据身高从高到低进行排序。

这里比较 tricky 的就是当你把最高的人挑出来后,再将下次挑出来的人插入到之前排好的队列时,k 代表的就是索引值。

你可能感兴趣的:(LeetCode 406)