题目描述:
题目意思是,给定一个people二维数组,里面放的是1*2的一维数组,其第一个元素是身高,第二个元素是原始队列中该位置前面身高大于等于此身高的人数,题目要求将这个打乱了的队列恢复到之前的样子。
解题思路:
通过观察可以知道,应该先排个子高的人,他们的相对位置确定之后,比他们低的人进队将不会影响他们的相对位置;因此需要对people数组做如下排序:
1、相同身高的人,按照k升序排列;
2、不同身高的人,按照身高降序排列。
将上述排列后的people的元素按顺序插入到位置k上,也就是说,每次插入的时候,保证插入的元素前面比其高的人的个数为k,这样就能得到原始队列的顺序了。
具体代码如下:(参考了官方的代码)
1 class Solution { 2 public int[][] reconstructQueue(int[][] people) { 3 Arrays.sort(people, new Comparator<int[]>(){ //重写compare方法 4 @Override 5 public int compare(int[] o1 , int[] o2){ 6 return o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]; //相同身高的,按照k升序排,不同身高的按照身高降序排 7 } 8 }); 9 10 List<int[]> result = new LinkedList<>(); 11 for(int[] p : people){ 12 result.add(p[1] , p);//始终保证队列前面有k个身高大于等于p[0]的人 13 } 14 int len = people.length; 15 return result.toArray(new int[len][2]); 16 } 17 }
原文:https://www.cnblogs.com/zhang-yi/p/12865539.html