https://leetcode.cn/problems/queue-reconstruction-by-height/
题目要求
假设有打乱顺序的一群人站成一个队列,数组 people
表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki]
表示第 i 个人的身高为 hi
,前面 正好 有 ki
个身高大于或等于 hi 的人。
请你重新构造并返回输入数组 people
所表示的队列。返回的队列应该格式化为数组 queue
,其中 queue[j] = [hj, kj]
是队列中第j
个人的属性(queue[0]
是排在队列前面的人)。
贪心
class Solution {
public int[][] reconstructQueue(int[][] people) {
// 对身高进行排序,身高相同位置小的排在前面
Arrays.sort(people, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]);
// Arrays.sort(people, (o1, o2) -> o2[0] - o1[0]);
LinkedList<int[]> res = new LinkedList<>();
int n = people.length;
// 插入到下标为p[1]的位置
for (int[] p : people) {
res.add(p[1], p);
}
return res.toArray(new int[res.size()][]);
}
}
按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。