LeetCode 406 Queue Reconstruction by Height

晦若晨曦發表於2017-12-14

#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]);
    }
複製程式碼

相關文章