215. 数组中的第K个最大元素
给定整数数组 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]永远是最小的元素。
heapq堆的常用方法:
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]