R5-堆篇
笑死,摆烂式
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
nums.sort()
return nums[-k]
堆排序
堆排序(英语:Heapsort)是指利用堆(heap)这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
n=len(nums)
def maxHepify(arr,i,end):
#下标0代表堆顶,j为i的左子节点
j=2*i+1
while j<=end:
if j+1<=end and arr[j+1]>arr[j]:
j+=1
if arr[i]<arr[j]:
arr[i],arr[j]=arr[j],arr[i]
i=j
j=2*i+1
else:
break
#建堆[大根堆]
for i in range(n//2-1,-1,-1):
maxHepify(nums,i,n-1)
# 排序:依次将堆顶元素(当前最大值)放置到尾部,并调整堆
# k-1次重建堆(堆顶元素),或 k次交换到尾部(倒数第k个元素)
for j in range(n-1,n-k-1,-1):
nums[0],nums[j]=nums[j],nums[0]
maxHepify(nums,0,j-1)
return nums[-k]
ps:
具体看