簡體   English   中英

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

[英]Find the k-th largest element in the list

給定一個列表,在列表中找到第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 

我發現了兩種解決方法。 首先,我們將對數組進行排序。 因此,我們要做的就是返回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);

您還可以使用:

sorted(my_list)[-k]

sorted函數默認情況下按升序對項目進行排序。 您還調用了定義反向參數(將降序設置為True)並獲得第k個最大值:

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

嘗試做時間復雜度<(n log n)

提供的所有解決方案都具有n log n的復雜性。

以下代碼

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 <log n,則復雜度仍<n log n。 如果k = O(n),則復雜度為O(n ^ 2),即> n log n,排序將更快。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM