LeetCode 406 Queue Reconstruction by Height

1,026 阅读1分钟

LeetCode 406. Queue Reconstruction by Height

原题链接:

Queue Reconstruction by Height

题目大意:

有一个由[h,k]组成的随机的数组如下案例:

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

h表示高度,k表示在此之前,大于或等于此高度的元素数量。

要求排序为符合题目的数列,上述案例结果如下所示:

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

解题思路:

很简单的排序,但是有个很精巧的机关。

首先按照高度从大到小排序,相同的高度按照位置从小到大排序

然后从第一个开始插入到一个新数组中。此时很"凑巧"的,第二个k就是应该插入的位置。因为根据之前的排序,当前,新数组的所有元素都大于等于旧数组。

AC代码:

/**
     * 406. Queue Reconstruction by Height
     * @param peoples
     * @return
     */
    public static int[][] reconstructQueue (int[][] peoples){

        Arrays.parallelSort(peoples, (a, b) -> a[0] != b[0] ? b[0] - a[0] : a[1] - b[1]);

        List<int[]> result = new ArrayList<>();

        for(int i=0;i<peoples.length;i++){
                result.add(peoples[i][1],peoples[i]);
        }

        return result.toArray(new int[0][0]);
    }