给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
方法1:直接排序法
class Solution:
def findKthLargest(self, nums, k):
nums1=sorted(nums,reverse=True)
return nums1[k-1]
方法2:堆排序法
class Solution:
def findKthLargest(self, nums, k):
temp=list()
n=len(nums)
for num in nums:
heapq.heappush(temp,num)
for i in range(n-k+1):
ans=heapq.heappop(temp)
return ans
堆是非线性的树形的数据结构,有两种堆,最大堆与最小堆。( heapq库中的堆默认是最小堆)
- 最大堆,树中各个父节点的值总是大于或等于任何一个子节点的值。
- 最小堆,树中各个父节点的值总是小于或等于任何一个子节点的值。
python的heapq模块提供了对(最小)堆的建立和使用。
heapq堆数据结构最重要的特征是heap[0]永远是最小的元素。
1、heapq.heappush(heap, item)
heap为定义堆,item增加的元素。
import heapq h = [] heapq.heappush(h,2) h [2]
2、heapq.heapify(list)
将列表转换为堆。
list = [1,2,3,5,1,5,8,9,6] heapq.heapify(list) list [1, 1, 3, 5, 2, 5, 8, 9, 6]
3、heapq.heappop(heap)
删除并返回最小值,因为堆的特征是heap[0]永远是最小的元素,所以一般都是删除第一个元素。
list=[1, 1, 3, 5, 2, 5, 8, 9, 6] heapq.heappop(list) 1 list [1, 2, 3, 5, 6, 5, 8, 9]



