题目:
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
思路:
重构排序算法,以头元素降序,尾元素升序的队列排列。
根据尾元素嵌入 list
根据 list 顺序,嵌入结果集
class Solution {
public int[][] reconstructQueue(int[][] people) {
if(people == null)
return null;
Arrays.sort(people, new Comparator<int[]>() {
@Override
public int compare(int[] a, int[] b) {
if(a[0] == b[0])
return a[1] - b[1];
return b[0] - a[0];
}
});
List<int[]> list = new ArrayList<>();
for(int[] p : people) {
list.add(p[1], p);
}
int[][] result = new int[people.length][2];
for(int i=0; i<list.size(); i++) {
result[i] = list.get(i);
}
return result;
}
}