Leetcode 406. 根据身高重建队列 Python3实现
编写一个算法根据身高重建队列。加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!
Python3代码如下:
class Solution:
def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
# people中元素的个数如果小于2,不需要重排,直接返回即可
if len(people) < 2:
return people
# 我们先不考虑身高,由于k是排在这个人前面的人数,所以k越小,应该优先排在前面
# 接下来考虑身高,由于k是排在这个人前面且身高大于或等于h的人数,因此小于该人身高的不计算
# 所以当索引相同时身高矮的在前面,否则如果高的在前面,矮的那个人的k与位置就不匹配了
# 了解了重排的规则,接下来我们只需要先按身高降序,再按索引升序
"""按身高降序的原因是根据insert()的插入原则,两个元素的插入位置相同时,
后插入的元素会插入到前插入元素的前面,我们排序规则为索引相同时身高矮的在前面,
所以我们应该把身高矮的放在高的后面插入"""
"""此外,我们在此基础上按索引升序,原因是如果不升序,
身高相同(由于k是排在这个人前面且身高大于或等于h的人数,注意这里包含等于),索引大的如果先插入,
会导致此时前面的元素还没全部插入(前面如果有身高相同的也需要计入的),所以此时插入的位置肯定是不对的"""
people_sorted = sorted(people,key = lambda x : (-x[0],x[1])) # 构造插入的顺序
result = []
# 按照我们构造的顺序重新排列
for p in people_sorted:
result.insert(p[1],p)
return result