取出列表中第N大的数
Posted zxmbky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了取出列表中第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])
以上是关于取出列表中第N大的数的主要内容,如果未能解决你的问题,请参考以下文章
求C语言程序,从1~2012中取k个数,取出的数中任意两个数之差不能为5或8,求k的最大值