问题
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
注意:
总人数少于1100人。
例子
思路
k是它前面身高>=它的个数
原理:高个子先站好,然后把矮个子插入放到k位置,因为都比它高
-
方法1
$$$$
先排序,再插入【按照身高h降序,k升序的顺序:为什么k要升序,当身高一样时,插入时方便插入,按k升序的话,新插入的数据要么下标已经存在要么是当前最大小标=1】
-
方法2
$$$$
代码
//方法1
class Solution {
public int[][] reconstructQueue(int[][] arr) {
Arrays.sort(arr, (a,b)->{
//按照身高降序,排位升序进行排序
return a[0]!=b[0]?b[0]-a[0]:a[1]-b[1];
});
List<int[]> list = new ArrayList<>();
for(int[] i : arr) {
list.add(0+i[1],i);
}
return list.toArray(new int[arr.length][2]);
}
}
//方法2