本题的思路是先根据身高(h)对people数组进行降序排序,若某两人身高相同,则对k进行升序排序。
对本题而言排序后的数组为[[7,0],[71],[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]]
了解过程后 可以看出后面插入的人的身高低于前面插入的人,因此他们的插入不会对已经插入的人的k值产生影响
class Solution {
public int[][] reconstructQueue(int[][] people) {
Arrays.sort(people,(a, b)->{
if(a[0]!=b[0]) return b[0]-a[0]; //降序
else return a[1]-b[1]; //降序
});
LinkedList<int[]> res=new LinkedList<>();
for(int[] p:people)
{
res.add(p[1],p);
}
return res.toArray(new int[people.length][]);
}
}
在具体实现过程中,需要先使用lambda表达式定义排序规则 若身高不同 则按身高降序排序
若身高相同,则按索引k升序排序
由于要实现插入过程,因此需要构建动态数组
在每一次插入中,直接按索引插入即可