406.根据身高重建队列
1.题目
2.我的解决方案
我是没有想到两个方向不一样的排序这种情况的
3.官方的解决方案
class Solution:
def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
# 套路,两个关键字,一个正向排序,一个反向排序(只要是相反的就行)
people.sort(key = lambda x: (-x[0], x[1])) # 这个实际上是两次排序
# 按照身高从大到小排列,就能知道i前面正常情况下应该排几个人
# 按照ki从小到大排列,是因为我们希望ki大的尽量排在后面
# 两个排序能减轻插入的难度
res = [] # 可以认为是队列
for p in people: # p表示当前第i个人
if len(res) <= p[1]: # 如果队列内人的数量小于了当前i前面应该站的人的数量
res.append(p)
else: # 大于的情况下
res.insert(p[1], p) # 在p[1]位置将p插入
return res
- 时间复杂度: O ( n 2 ) O(n^2) O(n2)
- 空间复杂度: O ( l o g n ) O(logn) O(logn)