[英]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.