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