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 在未排序的陣列中找到...