码迷,mamicode.com
首页 > 其他好文 > 详细

取出列表中第N大的数

时间:2019-01-17 12:49:20      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:hid   nlog   数据   pen   技术分享   open   默认   color   max   

技术分享图片
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

 

取出列表中第N大的数

标签:hid   nlog   数据   pen   技术分享   open   默认   color   max   

原文地址:https://www.cnblogs.com/zxmbky/p/10281564.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!