取出列表中第N大的数

array=list(range(10))
random.shuffle(array)
print(array)
def func1(array,n):
    d,k={},n
    while k>0:
        maxnum,maxindex=-float("inf"),0
        for index,value in enumerate(array):
            if index not in d:
                if value>=maxnum:
                    maxnum=value
                    maxindex=index
        d[maxindex]=maxnum
        k-=1
    return list(d.values())[2]#因为python现在的版本字典默认是有序的,所以可以这么用
每次取出一个最大
方案2,建立一个小根堆,保存前三大的数据,时间复杂度nlogk
def list2bucket(li,i):
    buckets=[[] for _ in range(10)]
    for val in li:
        digit=val//(10**i)%10
        buckets[digit].append(val)
    return buckets

def bucket2lit(buckets):
    li=[]
    for bucket in buckets:
        for val in bucket:
            li.append(val)
    return li


def radix_sort(li):
    max_val=max(li)
    i=0
    while 10**i<=max_val:
        li=bucket2lit(list2bucket(li,i))
        i+=1
    return li

print(radix_sort(array)[-3])
基数排序,然后取出第三大的数.假设最大数位数为i,时间复杂度为in

 

转载于:https://www.cnblogs.com/zxmbky/p/10281564.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值