根據(jù)身高重建隊(duì)列
假設(shè)有打亂順序的一群人站成一個(gè)隊(duì)列,數(shù)組 people 表示隊(duì)列中一些人的屬性(不一定按順序)。每個(gè) people[i] = [hi, ki] 表示第 i 個(gè)人的身高為 hi ,前面 正好 有 ki個(gè)身高大于或等于 hi 的人。
請(qǐng)你重新構(gòu)造并返回輸入數(shù)組 people 所表示的隊(duì)列。返回的隊(duì)列應(yīng)該格式化為數(shù)組 queue ,其中 queue[j] = [hj, kj] 是隊(duì)列中第 j 個(gè)人的屬性(queue[0] 是排在隊(duì)列前面的人)。
示例 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]]
解釋?zhuān)?/strong>
編號(hào)為 0 的人身高為 5 ,沒(méi)有身高更高或者相同的人排在他前面。
編號(hào)為 1 的人身高為 7 ,沒(méi)有身高更高或者相同的人排在他前面。
編號(hào)為 2 的人身高為 5 ,有 2 個(gè)身高更高或者相同的人排在他前面,即編號(hào)為 0 和 1 的人。
編號(hào)為 3 的人身高為 6 ,有 1 個(gè)身高更高或者相同的人排在他前面,即編號(hào)為 1 的人。
編號(hào)為 4 的人身高為 4 ,有 4 個(gè)身高更高或者相同的人排在他前面,即編號(hào)為 0、1、2、3 的人。
編號(hào)為 5 的人身高為 7 ,有 1 個(gè)身高更高或者相同的人排在他前面,即編號(hào)為 1 的人。
因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新構(gòu)造后的隊(duì)列。
排序:高的排前,相同k小的排前
對(duì)于[[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]],排完之后:[[7,0],[7,1],[6,1],[5,0],[5,2],[4,4]]
插入的過(guò)程:
插入[7,0]:[[7,0]]
插入[7,1]:[[7,0],[7,1]]
插入[6,1]:[[7,0],[6,1],[7,1]]
插入[5,0]:[[5,0],[7,0],[6,1],[7,1]]
插入[5,2]:[[5,0],[7,0],[5,2],[6,1],[7,1]]
插入[4,4]:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
public int[][] reconstructQueue(int[][] people) {
Arrays.sort(people, (o1, o2) -> {
if (o1[0] != o2[0]) {
return o2[0] - o1[0];
}
return o1[1]-o2[1];
});
List<int[]> res = new ArrayList<>();
for (int[] person : people) {
res.add(person[1], person);
}
return res.toArray(new int[res.size()][]);
}