链接
406. 根据身高重建队列 - 力扣(LeetCode)
题目
思路
可能的一个思路是先对高的人进行处理,这样后面插入矮的人时不会影响高的人的位置。比如,如果先处理高个子,那么当插入一个矮个子的时候,前面的高个子的数量已经确定,不会因为插入矮个子而改变。
先按h降序,再按组内k升序-->优先保证组内有序
然后再考虑“后面插入矮的人时不会影响高的人的位置”
代码
people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
people.sort(key=lambda x:(-x[0],x[1])) # 优先组内有序
print(people)
res=[]
for i,p in enumerate(people):h,k=p[0],p[1]if k==i:res.append(p) # 在末尾插入elif k<i:res.insert(k,p) # 在k位置插入p
print(res)
反思
- 想清楚思路
- 先对高的进行处理-->先对整体的的身高进行排序([0])
- 满足限制--同样的身高,k小的在前面大的在后面([1])-1,2->局部有序
- 高中插入矮的不影响整体
- sort
- 排序规则key可以两个,`key=lambda x:(-x[0],x[1])`
- enumerate
- 有点像字典,拆成一个键一个值
enumerate
是一个内置函数,用于在遍历可迭代对象(如列表、元组、字符串等)时,同时获取元素的索引和值。它返回一个枚举对象(enumerate
对象),可以通过list()
或tuple()
转换为列表或元组。