假设有打乱顺序的一群人站成一个队列,数组 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 相同时决定顺序。
591

被折叠的 条评论
为什么被折叠?



