# **Leetcode筆記(Kth Largest Element in a Stream)**
:::info
:information_source: 題目 : Kth Largest Element in a Stream, 類型 : heap , 等級 : easy
日期 : 2023/07/08,2024/10/17
:::
### 嘗試
**如果要把init的變數拿來用的話,要添加成self,變成全域變數**
- 時間複雜度:
- 在 `__init__` 方法中,首先將 `nums` 列表賦值給 `self.minHeap`,時間複雜度為 O(N),其中 N 是 `nums` 列表的長度。
- 時間複雜度為 O((N - k) log k),因為每次彈出操作的時間複雜度是 O(log k),需要執行的次數最多為N - k 。
- `heapq.heappush` 和`heapq.heapop`的時間複雜度是 O(log k)。
- 空間複雜度:
- 使用了一個大小為 N 的列表 `self.minHeap` 來存儲初始的元素,空間複雜度為 O(N)。
- 在 `add` 方法中,沒有引入額外的資料結構,空間複雜度是 O(1)。
```python
class KthLargest:
def __init__(self, k: int, nums: List[int]):
self.minHeap, self.k = nums, k # minHeap會傾向留下最大的
heapq.heapify(self.minHeap)
while len(self.minHeap) > k:
heapq.heappop(self.minHeap)
def add(self, val: int) -> int:
# 並不需要pop數字出來
heapq.heappush(self.minHeap, val)
if len(self.minHeap) > self.k:
heapq.heappop(self.minHeap)
return self.minHeap[0]
```
2024/10/17
把所有數字都存進去會超時,minheap傾向存大,那就固定留下k個最大的,並且用minheap[0]一定是最小的特性,去回傳最大裡面的最小
```python
class KthLargest:
def __init__(self, k: int, nums: list):
self.nums = nums
self.k = k
heapq.heapify(self.nums)
while len(self.nums) > self.k:
heapq.heappop(self.nums)
def add(self, val: int):
heapq.heappush(self.nums, val)
while len(self.nums) > self.k:
heapq.heappop(self.nums)
return self.nums[0]
# Your KthLargest object will be instantiated and called as such:
# obj = KthLargest(k, nums)
# param_1 = obj.add(val)
```
---
### **優化**
```python
```
---
**:warning: 錯誤語法**
:::warning
:::
**:thumbsup:學習**
:::success
:::
**思路**
**講解連結**
Provided by.
###### tags: `heap` `easy` `leetcode`