站队顺序输出

站队顺序输出

描述

有一群人站队,每人通过一对整数(h, k)来描述,其中h表示人的高度,k表示在此人前面队列中身高不小于此人的总人数。

实现一个算法输出这个队列的正确顺序。

输入:

[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

输出:

[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

思路:先用第二项升序排列再用第一项降序排列。可保证对于有相同第二项的元素中第一项小的在后,插入时可在前。同时要保证第一项相同的两个元素中第二个元素小的先插入。
 1 def takeFirst(li):
 2     return(li[0])
 3 def takeSecond(li):
 4     return(li[1])
 5 ls=[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
 6 ls.sort(key=takeSecond)
 7 ls.sort(key=takeFirst,reverse=True)
 8 output=[]
 9 for item in ls :
10     output.insert(item[1],item)
11 print(output)
View Code

两次排序结果如下

[[7, 0], [5, 0], [7, 1], [6, 1], [5, 2], [4, 4]]
[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]

 1 # inputls = eval(input())
 2 inputls = [[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]]
 3 sortls = sorted(inputls) #将输入列表从小到大排序
 4 num = len(sortls)
 5 indexls = list(range(num)) #初始化一个列表记录输出列表的索引值
 6 output = list(range(num)) #初始化输出列表,设定列表长度
 7 pops = [] #存放循环中需要从indexls中删除的索引值
 8 for x in range(num):
 9     k = sortls[x][1]
10     index = indexls[k]
11     output[index] = sortls[x]
12     if x < num-1 and sortls[x][0] == sortls[x+1][0]:
13         pops.append(k)
14     else:
15         pops.append(k)
16         for p in pops:
17             indexls[p] = 'flag'
18         while 'flag' in indexls:
19             indexls.remove('flag')
20         pops = []
21 
22 print(output)
View Code

上面的代码引用自

https://blog.csdn.net/u013378642/article/details/80875793  的博客
posted on 2018-08-22 01:20  clintLove 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/clintLove/p/9509047.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值