LeetCode刷題 堆

Gsupl.落浅~發表於2024-09-07

一:堆

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] 

相關文章