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

2021-10-09 20:18:51 字數 1250 閱讀 2542

class

solution

:def

findkthlargest

(self, nums: list[

int]

, k:

int)

->

int:

"""堆排序思想"""

defheapify

(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+

1if start*2+

2<= end and array[max_pos]

< array[start*2+

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

max_pos = start*2+

2if 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 堆排序思想 def heapify 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 在未排序的陣列中找到...