一、题目链接

根据身高重建队列

二、题目正文

假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对 (h, k) 表示,其中 h 是这个人的身高,k 是应该排在这个人前面且身高大于或等于 h 的人数。 例如:[5,2] 表示前面应该有 2 个身高大于等于 5 的人,而 [5,0] 表示前面不应该存在身高大于等于 5 的人。

编写一个算法,根据每个人的身高 h 重建这个队列,使之满足每个整数对 (h, k) 中对人数 k 的要求。

输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

三、解题思路

每个人的位置由h和k,共同决定,h越大越靠前,k越小越靠前。观察测试用例,先根据h与k排序,按照h降序排列,若h相等则按照k升序排列。排序结束后,再根据k值插入每个人的位置。

四、代码

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people, new Comparator<int[]>() {
            public int compare(int[] o1, int[] o2) {
                if(o1[0]==o2[0])
                    return (o1[1]-o2[1]);
                else
                    return (o2[0]-o1[0]);
            }
        });
        LinkedList<int[]> tempList = new LinkedList<int[]>();
        for (int[] ele:people) {
            tempList.add(ele[1],ele);
        }
        return tempList.toArray(new int[0][2]);
    }
}