这两个函数都从数组中找到第k个最大的元素。第一个使用MinHeap找到最大的,而第二个使用MaxHeap。有人能解释一下这两个函数的时间复杂性吗?
from heapq import heappop, heappush, heapify
def findKthLargest1(arr, k): #Using MinHeap
minHeap = []
for num in arr:
heappush(minHeap, num)
if len(minHeap) > k:
heappop(minHeap)
return minheap[0]
def findKthLargest(arr,k): #Using MaxHeap
maxHeap = []
for num in arr:
heappush(maxHeap, num * -1)
for i in range(k):
sol = heappop(maxHeap) * -1
return sol
两者都具有O(N)
空间复杂性,因为我们创建了一个新的数据结构堆
在两者中,我们都只持有";k〃;堆中的项,并仅对k个项进行排序。所以两者都有
T:O(k * log(k))
用于划分的log(k)
k
用于比较