假设有打乱顺序的一群人站成一个队列,数组 people
表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki]
表示第 i
个人的身高为 hi
,前面 正好 有 ki
个身高大于或等于 hi
的人。
请你重新构造并返回输入数组 people
所表示的队列。返回的队列应该格式化为数组 queue
,其中 queue[j] = [hj, kj]
是队列中第 j
个人的属性(queue[0]
是排在队列前面的人)。
思考:首先需要对这个二维数组进行排序,身高小的 在前, 如果 身高相同 k小的 靠前
//按数组第一个元素进行降序,按第二个元素进行升序:
然后建立一个链表,把对应的k值存放到链表相应的index位置处。
class Solution {
public int[][] reconstructQueue(int[][] people) {
// 对people进行排序 身高小的 在前, 如果 身高相同 k小的 靠前
//按数组第一个元素进行降序,按第二个元素进行升序
Arrays.sort(people, new Comparator<int[]>() {
@Override
public int compare(int[] person1, int[] person2){
if (person1[0] != person2[0]){
//第一个元素不相等时,第一个元素降序
return person2[0] - person1[0];
}else{
//第一个元素相等时,第二个元素升序
return person1[1] - person2[1];
}
}
});
// 新建一个链表保存结果;
List<int[]> que = new LinkedList<>();
for(int i=0;i<people.length;i++){
if(que.size()>people[i][1]){
que.add(people[i][1],people[i]);
}else{
que.add(que.size(),people[i]);
}
}
return que.toArray(new int[people.length][]);
}
}