**题目要求:**![在这里插入图片描述](https://img-blog.csdnimg.cn/2019081610310432.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjQ1NjM2,size_16,color_FFFFFF,t_70)
分析:
-
先将输入的数组按照身高h进行降序排列,方法是利用匿名内部类重写Comparator接口中的compare方法;
按照题中给出的例子为例,此时得到的people顺序为:[[7, 0] [7, 1] [6, 1] [5, 0] [5, 2] [4, 4]]
-
设置一个list,从h最大的数组开始依次往list中放,其位置为k的大小;
-
设置一个二维数组result,对排过序的people进行遍历,其k值大小就是其坐标大小,如下图所示。
具体代码如下: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;
}
}