一:堆
1、一種二叉樹的結構(完全二叉樹)
2、完全二叉樹:從上到下;從左到右;填滿
3、最大堆:根節點的權值大於孩子節點
4、最小堆:根節點的權值依次小於孩子節點
5、常用操作
#建立堆(最大堆,最小堆)
#新增元素
#獲取堆頂元素
#刪除堆頂元素
#堆的長度
#堆的遍歷
二:刷題
215 陣列中的第K個最大元素
#方法1 陣列
def func(nums,k):
nums.sort()
return nums[-k]
nums=[3,2,3,1,2,4,5,5,6]
k = 4
print(func(nums,k))
#方法2 最大堆
import heapq
def func(nums, k):
# Step 1: 取陣列的前 k 個元素,構建最小堆
min_heap = nums[:k]
heapq.heapify(min_heap) # 將列表轉換為最小堆
# Step 2: 遍歷剩餘的元素
for num in nums[k:]:
if num > min_heap[0]: # 如果當前元素大於堆頂元素
heapq.heappop(min_heap) # 移除堆頂元素
heapq.heappush(min_heap, num) # 將當前元素加入堆
# Step 3: 返回堆頂元素
return min_heap[0]