第一眼看到这个题就感觉是写个新的Comparator,但是没啥思路,就没坚持。最终果然还是用这个方法,果然男人的直觉是挺准的。
对身高进行降序,然后对k值升序,然后再按照k值重新插入数组。这样就能保证插入位置前面的身体中都是比当前位置大的,并且不会影响后续的操作,只需要插就可以了。
也是第一次知道了LIst可以按位置指定add
class Solution {
public int[][] reconstructQueue(int[][] people) {
if(people==null || people.length==0 || people[0].length==0) return new int[0][0];
Arrays.sort(people,new Comparator<int[]>(){
public int compare(int[] a,int[] b){
if(a[0]==b[0]) return a[1]-b[1];
return b[0]-a[0];
}
});
int n = people.length;
List<int[]> tmp = new ArrayList<>();
for(int i=0;i<n;i++){
tmp.add(people[i][1],new int[]{people[i][0],people[i][1]});
}
int[][] ret = new int[n][2];
for(int i= 0;i<n;i++){
ret[i][0] = tmp.get(i)[0];
ret[i][1] = tmp.get(i)[1];
}
return ret;
}
}