LeetCode-406

假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。

请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。

学习了bi站朱正阳学长的方法:

【【蓝桥杯】Python速成 课时3:贪心 & 排序 例题精讲】 【精准空降到 16:38】 https://www.bilibili.com/video/BV18c9iY4Eyu/?share_source=copy_web&vd_source=34c6b5d9ed8ba105c19f9c0924e95304&t=998

class Solution:
    def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
        people.sort(key = lambda x:(-x[0], x[1])) #数组的第一个维度h按照降序排序,数组的第二个维度k按照升序排序
        res_list = []
        for i, p in enumerate(people):
            h, k = p[0], p[1]
            if k == i:
                res_list.append(p)
            else:
                res_list.insert(k, p)
        return res_list

代码当中有一行看了许久理解不了:

 people.sort(key = lambda x:(-x[0], x[1]))

询问AI:

people 是个由二元列表组成的列表,每个元素形如 [h, k]。people.sort(key=lambda x: (-x[0], x[1])) 的含义:

  • sort 的 key 参数接受一个函数,该函数对每个元素返回一个用于比较的“键”。
  • lambda x: (-x[0], x[1]) 对每个元素 x(即 [h,k])返回一个二元元组:(-h, k)。
  • Python 排序按键的自然顺序(元组先比较第一个元素,再比较第二个),均为升序比较:
    • 因为使用了 -x[0],所以 h 越大时 -h 越小,排序按 -h 的升序就相当于按 h 的降序。
    • 第二个值 x[1] 是原值,按升序比较,用来在 h 相同时决定顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值