LeetCode 406. 根據身高重建佇列
阿新 • • 發佈:2020-11-16
題目連結
題目思路
這個題給了我們一個二維陣列,第二維的含義有兩個:
- 第
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; } }