在列表中找到第k个最大元素

时间:2019-08-22 04:50:44

标签: python

给出一个列表,在列表中找到第k个最大元素。

  

输入:列表= [3、5、2、4、6、8],k = 3

     

输出:5

def findKthLargest(nums, k):
    pass

print(findKthLargest([3, 5, 2, 4, 6, 8], 3))
# 5 

5 个答案:

答案 0 :(得分:1)

我发现了两种解决方法。首先,我们将对数组进行排序。因此,我们要做的就是返回k-last索引。

def findKthLargest1(nums, k):

    nums.sort()
    return nums[-k]

但是有一个更有趣的方法可以解决此问题,我们可以使用堆。通常,当您听到有关“最小”或“最大”的信息时。您应该考虑:我需要堆。

import heapq

def findKthLargest2(nums, k):

    minHeap = []
    heapq.heapify(minHeap)

    for x in nums:
        heapq.heappush(minHeap, x)
        if len(minHeap) > k:
            heapq.heappop(minHeap)

    return heapq.heappop(minHeap);

答案 1 :(得分:1)

您还可以使用:

sorted(my_list)[-k]

答案 2 :(得分:0)

sorted函数默认情况下按升序对项目进行排序。您还调用了定义反向参数(降序设置为True)并获得第k个最大值:

sorted(nums, reverse=True)[k-1]

答案 3 :(得分:0)

  

尝试进行时间复杂度<(n log n)

提供的所有解决方案的复杂度为n logn。

以下代码

def findKthLargest(nums, k):
    for _ in range(k):
        s = max(nums)
        t.remove(s)
    return s

将需要2(kn-k(k-1)/ 2)个运算,因此其复杂度为O(kn)。 如果k为常数(不是n的函数),则复杂度为线性O(n)。 如果k是n的函数,但对于所有k,n,k n log n,排序会更快。

答案 4 :(得分:-2)

k = int(input()) l = [6,2,1,9,5] l.sort() print(l[-k])