分析:(1) 根据所给的people数组进行排序,按照身高以降序的方式排序,若身高相同则按照k的值进行升序排列。因为高个排在前面会影响后面低个子的k值。
(2)把排好的people数组中低个按照k值插入数组的下标为k的地方。
class Solution {
public int[][] reconstructQueue(int[][] people) {
int n = people.length;
int m = people[0].length;
if(n == 0 || m == 0) return new int [0][0];
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];
}
});
//遍历排序后的数组,根据k插到k的位置上
List<int[]> list = new ArrayList<>();
for(int[] i : people){
list.add(i[1],i);
}
return list.toArray(new int[list.size()][2]);
}
}
class Solution {
public int[][] reconstructQueue(int[][] people) {
Arrays.sort(people,(o1,o2)->o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]);
//用lambda表达式定义比较器,对people数组根据身高进行降序排序,如过身高相同则根据k的升序排序
//[7,0][7,1][6,1][5,0][5,2][4,4]
List<int[]> list = new ArrayList<>();
for(int[] num : people){
list.add(num[1] , num);
}
return list.toArray(new int[list.size()][2]);
}
}