406 根据身高重建队列
题目

解题思路
- 此题需要依据身高h和数目k俩个维度进行排序,那么需要先确定下一个维度,那么接下来只需要确定另外一个维度即可。
- 假如说先依据k对people进行排序,然后在按照h进行排序,会发现并不符合要求。因此本题先依照身高h进行第一次排序。
- 题目要求高的站前面,那么排序时,h大的放前面,身高h相同的k小放前面。
- 按照贪心算法原则,全部局部最优推出全局最优
- 局部最优:优先按照身高高的people的k进行插入,插入操作过后的people满足队列属性。
- 最后都做完插入操作,整个队列满足题目队列属性
- 完成第一个维度身高h排序后,Java可以通过LinkedList进行排序,LinkedList.add(index, element),将k作为index索引,然后将对应元素插入该列表中的k个索引位置,即使得列表符合题意。
具体代码
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];
return o2[0] -o1[0];
}
});
LinkedList<int[]> que = new LinkedList<>();
for(int[] p : people){
que.add(p[1], p);
}
return que.toArray(new int[people.length][]);
}