练习:站队顺序输出
平台:Python123.io
教师:嵩天
站队顺序输出
描述
有一群人站队,每人通过一对整数(h, k)来描述,其中h表示人的高度,k表示在此人前面队列中身高不小于此人的总人数。
实现一个算法输出这个队列的正确顺序。
输入格式
输入格式为二维列表,即 list[list[]]形式
外层list包含队列中全部的人,内层list为[h,k]格式,代表个人信息。
输出格式
输出格式为:list[list[int]]形式
与输入格式一样,需要按照队列顺序排列。
输入输出示例
输入 | 输出 | |
示例 1 | | |
from operator import itemgetter
queue = eval(input())
queue.sort(key = itemgetter(1))
#print(queue)
queue.sort(key = itemgetter(0), reverse = True)
#print(queue)
output = []
for item in queue:
output.insert(item[1], item)
#print(output)
print(output)
将注释掉的几行也一起打印,方便分析
输入[[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
输出
[[7, 0], [5, 0], [7, 1], [6, 1], [5, 2], [4, 4]]
[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
[[7, 0]]
[[7, 0], [7, 1]]
[[7, 0], [6, 1], [7, 1]]
[[5, 0], [7, 0], [6, 1], [7, 1]]
[[5, 0], [7, 0], [5, 2], [6, 1], [7, 1]]
[[5, 0], [7, 0], [5, 2], [6, 1], [4, 4], [7, 1]]
[[5, 0], [7, 0], [5, 2], [6, 1], [4, 4], [7, 1]]
可以发现代码中首先对列表进行两次排序:
第一次将每个子列表1号位升序排序,第二次将每个字列表0号位倒序排序。
两次排序后我们得到了[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]这个列表,
接下来处理这个列表的方法就是一个个按此列表的顺序,将子列表插入到空列表中,
我们可以发现,每次插入时,已有子列表的“高度”肯定不小于正在插入的这个子列表,因此我们只需要按子列表第二项的位置去插入,插入完成后即可获得所需列表。
参考:https://blog.youkuaiyun.com/weixin_41153216/article/details/80857646
参考:https://blog.youkuaiyun.com/Hello_Mr_X/article/details/80911344