題目描述:
假設有打亂順序的一群人站成一個隊列,數組 people
表示隊列中一些人的屬性(不一定按順序)。每個 people[i] = [hi, ki]
表示第 i
個人的身高為 hi
,前面 正好 有 ki
個身高大于或等于 hi
的人。
請你重新構造并返回輸入數組?people
所表示的隊列。返回的隊列應該格式化為數組 queue
,其中 queue[j] = [hj, kj]
是隊列中第 j
個人的屬性(queue[0]
是排在隊列前面的人)。
初始代碼:
class Solution {public int[][] reconstructQueue(int[][] people) {}
}
示例1:
輸入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]] 輸出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 解釋: 編號為 0 的人身高為 5 ,沒有身高更高或者相同的人排在他前面。 編號為 1 的人身高為 7 ,沒有身高更高或者相同的人排在他前面。 編號為 2 的人身高為 5 ,有 2 個身高更高或者相同的人排在他前面,即編號為 0 和 1 的人。 編號為 3 的人身高為 6 ,有 1 個身高更高或者相同的人排在他前面,即編號為 1 的人。 編號為 4 的人身高為 4 ,有 4 個身高更高或者相同的人排在他前面,即編號為 0、1、2、3 的人。 編號為 5 的人身高為 7 ,有 1 個身高更高或者相同的人排在他前面,即編號為 1 的人。 因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新構造后的隊列。
示例2:
輸入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]] 輸出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]
參考答案:
class Solution {public int[][] reconstructQueue(int[][] people) {// 身高降序且個數升序進行排序Arrays.sort(people, (p1, p2) -> p1[0] != p2[0] ? p2[0] - p1[0] : p1[1] - p2[1]);// 根據個數作為索引插入集合中List<int[]> result = new ArrayList<>();for (int[] p : people) {result.add(p[1], p);}return result.toArray(new int[0][people[0].length]);}
}