题目
数对问题的处理方法基本就是对第一维升序排序 第二维降序排序 或者第一维降序 第二维升序 排序后就好好处理很多
本题的思路是将个高的排好 然后将个小的挨个插入 插入时候可以保证不会影响到后面个高的 因为他一定比身后个高的小
例如
// [7,0], [7,1], [6,1], [5,0], [5,2], [4,4]
// 再一个一个插入。
// [7,0]
// [7,0], [7,1]
// [7,0], [6,1], [7,1]
// [5,0], [7,0], [6,1], [7,1]
// [5,0], [7,0], [5,2], [6,1], [7,1]
// [5,0], [7,0], [5,2], [6,1], [4,4], [7,1]
public int[][] reconstructQueue(int[][] people) {
//先把个高的排好 个矮的插入进去
//身高按照降序排列 人数按照升序排列
Arrays.sort(people, new Comparator<int[]>() {
@Override
public int compare(int[] a, int[] b) {
if (a[0] == b[0]){
return a[1]-b[1];
}else return b[0]-a[0];
}
});
List<int []> list = new ArrayList<>();
for (int i = 0; i < people.length; i++) {
list.add(people[i][1],people[i]);
}
return list.toArray(new int[list.size()][2]);
}