一题目:
二思路:
- 先排序,1.先按照身高排序降序排,2按照位置升序排, 再插入
- 根本思路:核心思想:高个子先站好位,矮个子插入到K位置上,前面肯定有K个高个子,矮个子再插到前面也满足K的要求
// [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]
三代码:
class Solution {
public int[][] reconstructQueue(int[][] people) {
Arrays.sort(people, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
//如果两个数字相同,按照前面的数字个数升序排
if (o1[0]==o2[0]){
return o1[1]-o2[1];
}else {
//不同数字,按数字大小倒序
return o2[0]-o1[0];
}
}
});
List<int[]> res=new LinkedList<>();
for (int[] curr : people) {
res.add(curr[1],curr);
}
return res.toArray(new int[res.size()][2]);
}
}
网友评论