**406. 根据身高重建队列
1. 题目描述
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
注意:
总人数少于1100人。
示例
输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
2. 思路(力扣)
[c++] 排序,然后插入。
假设候选队列为 A,已经站好队的队列为 B.
从 A 里挑身高最高的人 x 出来,插入到 B. 因为 B 中每个人的身高都比 x 要高,因此 x 插入的位置,就是看 x 前面应该有多少人就行了。比如 x 前面有 5 个人,那 x 就插入到队列 B 的第 5 个位置。
具体如下:

注意的是:这里数组首先按第一个元素递减排序,然后第二个数要按递增排序!!!
一个小技巧可以实现这个步骤:
people = sorted(people,key=lambda x: x[0]*1000-x[1] , reverse=True)
3. 题解
class Solution:
def reconstructQueue(self, people):
if len(people)<2: return people
people = sorted(people,key=lambda x: x[0]*1000-x[1] , reverse=True)
res = []
res.append(people[0])
for i in range(1, len(people)):
res.insert(people[i][1], people[i])
return res

浙公网安备 33010602011771号