215.数组中的第K个最大元素(Medium)
题目描述
在未排序的数组中找到第 k 个最大的元素
样例
Input: [3,2,1,5,6,4] 和 k = 2
Output: 5
题解
方法一: 堆排
本题最适合的 O$(nlog_2n)$ 级的排序方法为堆排,小根堆满足题目所需的要求
方法二:快速选择
快速选择和快速排序的基本思路一致,不过只需要找到第 k 大的枢(pivot)即可,不需要对其左右再进行排序。
Python代码
方法一:堆排--Python自带的堆结构,默认小根堆
import heapq
from random import shuffle
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
shuffle(nums) # 随机排序
nums = [-1 * num for num in nums] # 小根堆求最大值
heapq.heapify(nums) # 建立堆结构
for _ in range(k - 1):
heapq.heappop(nums)
return -1 * heapq.heappop(nums)