要求
假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。
请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。
思路
先排序在插入:
- 排序规则:按照先H高度降序,K个数升序排序
- 遍历排序后的数组,根据K插入到K的位置上
核心思想:高个子先站好位,矮个子插入到K位置上,前面肯定有K个高个子,矮个子再插到前面也满足K的要求
public class LeetCode406 {
public int[][] reconstructQueue(int[][] people) {
//第一个元素相等的时候,第二个元素生序;不等时,第一个元素降序
Arrays.sort(people,(o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]);
LinkedList<int[]> list = new LinkedList<>();
//集合中加入数组和数组的下标
for (int[] i : people) {
list.add(i[1],i);
}
return list.toArray(new int[list.size()][2]);
}
}