↓快轉到主要內容
  1. LeetCode/

LeetCode 703: Kth Largest Element in a Stream

·1 分鐘· ·
LeetCode Easy Tree Design Binary-Search-Tree Heap-Priority-Queue
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-31

  • 提交紀錄:Accepted(一次通過)

解題思路
#

只要記住目前最大的 k 個數。用最小堆(Heap 模板一),超過 k 個就把最小的彈掉,堆頂就是這 k 個裡最小的,也就是第 k 大。

我的解法
#

class KthLargest:
    def __init__(self, k: int, nums: List[int]):
        self.k, self.heap = k, []
        for x in nums:
            self.add(x)

    def add(self, val: int) -> int:
        heapq.heappush(self.heap, val)
        if len(self.heap) > self.k:
            heapq.heappop(self.heap)
        return self.heap[0]

複雜度
#

每次 add 是 O(log k),空間 O(k)。

要特別避免的錯誤
#

  • 初始的 nums 可能少於 k 個,所以不能在建構時就假設堆是滿的。

面試口說整理
#

我維持一個大小最多 k 的最小堆,加入新的數之後如果超過 k 個就彈出最小的,堆頂就是第 k 大。每次 O(log k)。

相關文章

LeetCode 700: Search in a Binary Search Tree
·1 分鐘
LeetCode Easy Tree Binary-Search-Tree Binary-Tree
LeetCode 700 解題筆記:比目標大就往左、比目標小就往右,找到就回傳那個節點
LeetCode 530: Minimum Absolute Difference in BST
·1 分鐘
LeetCode Easy Tree Depth-First-Search Breadth-First-Search Binary-Search-Tree
LeetCode 530 解題筆記:BST 的中序是由小到大,最小差一定出現在中序相鄰的兩個值之間;記住前一個值逐一比較
LeetCode 501: Find Mode in Binary Search Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Binary-Search-Tree Binary-Tree
LeetCode 501 解題筆記:BST 中序是排序的,相同的值會連在一起;中序時數目前這段的長度,比最大值大就重設答案,一樣大就加入
LeetCode 108: Convert Sorted Array to Binary Search Tree
·1 分鐘
LeetCode Easy Array Divide-and-Conquer Tree Binary-Search-Tree
LeetCode 108 解題筆記:中間的元素當根,左右兩半遞迴;左右大小最多差 1,自然是平衡的
LeetCode 506: Relative Ranks
·1 分鐘
LeetCode Easy Array Sorting Heap-Priority-Queue
LeetCode 506 解題筆記:把 index 按分數由高到低排序,前三名給獎牌,其他給名次的字串,放回原本的位置
LeetCode 705: Design HashSet
·1 分鐘
LeetCode Easy Array Hash-Table Linked-List Design
LeetCode 705 解題筆記:固定數量的桶子,key 對桶子數取餘數決定放哪一桶,每個桶子用 list 處理碰撞