一、题目链接
二、题目正文
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对 (h, k) 表示,其中 h 是这个人的身高,k 是应该排在这个人前面且身高大于或等于 h 的人数。 例如:[5,2] 表示前面应该有 2 个身高大于等于 5 的人,而 [5,0] 表示前面不应该存在身高大于等于 5 的人。
编写一个算法,根据每个人的身高 h 重建这个队列,使之满足每个整数对 (h, k) 中对人数 k 的要求。
输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
三、解题思路
每个人的位置由h和k,共同决定,h越大越靠前,k越小越靠前。观察测试用例,先根据h与k排序,按照h降序排列,若h相等则按照k升序排列。排序结束后,再根据k值插入每个人的位置。
四、代码
class Solution {
public int[][] reconstructQueue(int[][] people) {
Arrays.sort(people, new Comparator<int[]>() {
public int compare(int[] o1, int[] o2) {
if(o1[0]==o2[0])
return (o1[1]-o2[1]);
else
return (o2[0]-o1[0]);
}
});
LinkedList<int[]> tempList = new LinkedList<int[]>();
for (int[] ele:people) {
tempList.add(ele[1],ele);
}
return tempList.toArray(new int[0][2]);
}
}
路漫漫其修远兮,吾将上下而求索;