代码越改越屎山,在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))

运行结果:

703. Kth Largest Element in a Stream刷题笔记_python