LeetCode 406 Medium 按身高重排队列 Python

75 篇文章 0 订阅
72 篇文章 0 订阅
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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值