215。陣列中第K個最大元素 堆實現

2022-07-12 12:12:10 字數 1008 閱讀 8769

class solution:

def findkthlargest(self, nums: list[int], k: int) -> int:

"""堆排序思想"""

def heapify(array, start, end):

while true:

max_pos = start #初始化最大值所在位置為目標所在

if start*2 + 1 <= end and array[max_pos] < array[start*2+1]:

# 如果左葉子節點存在,且大於目標值,則將最大值所在位置指向該節點所在位置

max_pos = start*2 + 1

if start*2 + 2 <= end and array[max_pos] < array[start*2+2]:

# 如果右葉子節點存在,且大於目標值,則將最大值所在位置指向該節點所在位置

max_pos = start*2 + 2

if max_pos == start:

# 如果目標即為最大,完成該節點堆化,跳出迴圈

break

# 交換位置,將最大值

array[start], array[max_pos] = array[max_pos], array[start]

start = max_pos

# 建堆,只需要對前半節點堆化

for i in range(len(nums)//2-1, -1, -1):

heapify(nums, i, len(nums)-1)

# 排序,只需要迴圈k次,排序top k個節點

i = len(nums) - 1

while i > len(nums) - 1 - k:

nums[0], nums[i] = nums[i], nums[0]

i -= 1

heapify(nums, 0, i)

return nums[len(nums)-k]

215。陣列中第K個最大元素 堆實現

class solution def findkthlargest self,nums list int k int int 堆排序思想 defheapify array,start,end while true max pos start 初始化最大值所在位置為目標所在 if start 2 1 ...

堆相關 215 陣列中的第K個最大元素

在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。示例 1 輸入 3,2,1,5,6,4 和 k 2 輸出 5 示例 2 輸入 3,2,3,1,2,4,5,5,6 和 k 4 輸出 4 我們可以使用最小堆來解決,乙個個遍歷原陣...

215 陣列中的第K個最大元素

題目 方法一 二 時間複雜度 o n logk 向大小為k的堆中新增元素的時間複雜度為o logk 我們將重複該操作n次 空間複雜度 o k 用於儲存k個堆元素 自己解答 速度太慢?有待提高 time 2019 10 9 下午01 04 file 陣列中第k大元素 215.py 在未排序的陣列中找到...