代码越改越屎山,在k比原输入大1的时候报错
import collections
class KthLargest:
def __init__(self, k: int, nums):
self.k = k
self.kth = -200000
if not nums:
self.flag = 1
return
self.flag = 0
# 从大排到小
self.q = collections.deque([nums[0]])
count = 1
for i in range(1, len(nums)):
if count < k:
for j in range(count):
if nums[i] >= self.q[j]:
self.q.insert(j, nums[i])
break
elif j == count - 1:
self.q.insert(count, nums[i])
count += 1
else:
for j in range(k):
if nums[i] >= self.q[j]:
self.q.insert(j, nums[i])
break
elif j == count - 1:
self.q.insert(j + 1, nums[i])
self.kth = self.q[k - 1]
return
def add(self, val: int) -> int:
if self.flag:
self.kth = max(self.kth, val)
elif val > self.kth:
for i in range(self.k):
if val >= self.q[i]:
self.q.insert(i, val)
self.kth = self.q[self.k - 1]
break
return self.kth
# kthLargest = KthLargest(3,[4,5,8,2])
# kthLargest.add(3)
# kthLargest.add(5)
# kthLargest.add(10)
# kthLargest.add(9)
# kthLargest.add(4)
# kthLargest = KthLargest(1,[-2])
# print(kthLargest.add(-3))
# print(kthLargest.add(0))
# print(kthLargest.add(2))
# print(kthLargest.add(-1))
# print(kthLargest.add(4))
kthLargest = KthLargest(2,[0])
print(kthLargest.add(-3))
print(kthLargest.add(0))
print(kthLargest.add(2))
print(kthLargest.add(-1))
print(kthLargest.add(4))
看了这个大佬的博客,发现原来用堆排序可以轻松解决heapq的文档,注意这是最小堆,并且heapreplace返回值可能会比添加的item大
pycharm代码
import heapq
class KthLargest:
def __init__(self, k: int, nums):
self.k = k
self.heap = nums
heapq.heapify(self.heap)
while len(self.heap)>k:
heapq.heappop(self.heap)
return
def add(self, val: int):
if len(self.heap)<self.k:
heapq.heappush(self.heap,val)
else:
if val>self.heap[0]:
heapq.heappushpop(self.heap,val)
return self.heap[0]
# kthLargest = KthLargest(3,[4,5,8,2])
# kthLargest.add(3)
# kthLargest.add(5)
# kthLargest.add(10)
# kthLargest.add(9)
# kthLargest.add(4)
# kthLargest = KthLargest(1,[-2])
# print(kthLargest.add(-3))
# print(kthLargest.add(0))
# print(kthLargest.add(2))
# print(kthLargest.add(-1))
# print(kthLargest.add(4))
kthLargest = KthLargest(2,[0])
print(kthLargest.add(-3))
print(kthLargest.add(0))
print(kthLargest.add(2))
print(kthLargest.add(-1))
print(kthLargest.add(4))
运行结果: