1. 程式人生 > 實用技巧 >LeetCode 406. 根據身高重建佇列

LeetCode 406. 根據身高重建佇列

題目連結

406. 根據身高重建佇列

題目思路

這個題給了我們一個二維陣列,第二維的含義有兩個:

  • i個人的身高。
  • 在佇列中,第i個人前面有arr[i][1]個人的身高大於或等於自己。

那麼這個有點像那個廣告牌的做法。首先我們先將陣列進行排序,排序規則如下:

  • 如果兩者身高相等,那就按照大於或等於自己身高的人的數量進行升序排序。
  • 否則按照身高降序排序。

然後我們利用一個List來插入資料。
插入規則是按照arr[i][1]作為插入座標,進行插入。
因為我們在插入資料的過程中,按照身高降序插入。當我們遇到第i個人的時候,他已經是當前剩餘人數中最高的那一個了。那麼我們在List中的第arr[i][1]

個位置插入這個人,就可以確保這個人在佇列中前面身高大於或等於自己的的資料是正確的。

程式碼實現

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people, (o1, o2) -> {
            return o1[0] == o2[0]? o1[1] - o2[1] : o2[0] - o1[0];
        });
        List<int[]> list = new ArrayList<>();
        for(int[] x : people){
            list.add(x[1], x);
        }
        int[][] res = new int[people.length][2];
        for(int i = 0; i < list.size(); i++){
            res[i] = list.get(i);
        }
        return res;
    }
}