LC406 根据身高重建队列
1.读题
2.解题思路
最开始的数组——
- hi 为身高属性
- ki 为这个人前面比他高的人数
- 但是排序是随便儿排的
排序好的数组——
- hi 为身高属性
- ki 为这个人前面比他高的人数
- 顺序是按照ki的规律排的
参考题解 先排序再插入
核心思路:“先排序后插入”
【1】先按高度 hi
降序排列
【2】再按 ki
升序排列
【3】接着遍历排序后的数组,根据ki
插入到对应的的位置上
3.代码逻辑
【1】如果队列为空 返回 new int[0][0]
—— 一个空的二位数组
【2】本题核心!进行上述的【1】【2】排序
惭愧的是 这个内容我没太搞懂
为什么要return person2[0] - person[1]
【3】遍历数组 根据k值填入对应位置 完成重建队列!
4.Java代码
class Solution {
public int[][] reconstructQueue(int[][] people) {
int n = people.length;//身高hi值有几个
int m = people[0].length;//ki值有几个
if (n == 0 || m == 0){
return new int[0] [0];
}
Arrays.sort(people, new Comparator<int[]>()
{
public int compare(int[] person1, int[] person2){//01 重写出身高降序排列 k值降序排列的 方法
if (person1[0] != person2[0]) return person2[0] - person1[0];//两人身高不同 进行降序排列
else {
return person1[1] - person2[1];//若两人身高相同 升序排列
}
}
} );
// 02 遍历排序后的数组 根据k值插入到k的位置上
List<int[]> ans = new ArrayList<int[]>();
for (int[] person : people) {
ans.add(person[1], person);
}
return ans.toArray(new int[ans.size()][]);
}
}