题目:
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
思路:
按身高从大到小排,按序号从小到大拍
依次按顺序嵌入数组
思路不复杂,但代码很精髓,值得一看
一个是重构 sort 方法,在某些地方很好用,值得记一下。
另一个是 list 的 add方法。还有索引这个参数。且插入时会自动将原索引的数后移这一点值得注意。
代码:
class Solution {
public int[][] reconstructQueue(int[][] people) {
Arrays.sort(people, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
//身高不等,按照身高从高到低排序;身高相等按照k值从小到大排序
return o1[0]==o2[0]?o1[1]-o2[1]:o2[0]-o1[0]; //个人理解:return返回大于0时,o1和o2交换
}
});
//2.在K位置上插入当前(h,k)
List<int[]> list=new ArrayList<>();
for(int[] p:people)
list.add(p[1],p);//参数1为index(当前人(h,k)的k),参数2为添加到list中的人(h,k)
return list.toArray(new int[list.size()][2]);
}
}