LeetCode 406 Medium 按身高重排队列 Python

本文详细解析了一种基于贪心算法的队列重构方法,通过处理当前最高的人,依次安排其在队列中的位置,实现了队列的有效重构。文章通过具体示例说明了算法的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

def reconstructQueue(self, people):
    """
    Disscussion Method
    算法:贪心,

    先处理当前最高的人,因为最高的人前面除了和自己同高度的人,一定不会有更高的人在他前面,而且根据题意,决定
    一个人位置的关键在于比他高的人的情况,而比它矮的则不考虑,所以依次安排当前最高的人的站位,先排最高的人是合适的
    如现在有[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
    那么就先处理最高的7,并且处理7还不用考虑比它低的其他元素的站位
    [7,0],[7,1]
    相同元素按[h,k]的k来排列
    剩余元素[ [4,4], [5,0], [6,1], [5,2]]
    排[6,1],对6来说,比它高的已经排好了,已经排好的序列就是比它高的所有元素的序列,那么此时[6,1]中的第二项,其实就
    已经标明了[6,1]在这次序列排序中应该在的位置,所以将[6,1]【插入】到它应该在的位置处
    [7,0],[6,1],[7,1]
    剩余元素[ [4,4], [5,0], [5,2]],最高的是[5,0], [5,2]
    对5来说也是一样,当前的result已经是排好的比它高的所有序列情况了,那么[5,0]和 [5,2]根据k插入到它应该在的位置
    [5,0],[7,0],[5,2],[6,1],[7,1]
    最后剩下[4,4],同样前面都是比4高的了,此时的k标明4应该在的位置,插入
    [5,0],[7,0],[5,2],[6,1],[4,4],[7,1]
    完成
    """
    people.sort(key=lambda x: (-x[0], x[1]))
    result = []
    for p in people:
        result.insert(p[1], p)
    return result

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值