215. 数组中的第K个最大元素
难度:中等
给定整数数组 nums
和整数 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
提示:
1 <= k <= nums.length <= 104
-104 <= nums[i] <= 104
解法一:快速排序
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
def Partition(left, right):
pivot = nums[left]
while left < right:
while left < right and nums[right] >= pivot:
right -= 1
nums[left] = nums[right]
while left < right and nums[left] <= pivot:
left += 1
nums[right] = nums[left]
nums[left] = pivot
return left
left, right = 0, len(nums) - 1
k = len(nums) - k
pivotpos = Partition(left, right)
while pivotpos != k:
if pivotpos > k:
right = pivotpos - 1
else:
left = pivotpos + 1
pivotpos = Partition(left, right)
return nums[pivotpos]
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
queue = []
for num in nums:
heapq.heappush(queue, num)
k = len(nums) - k
while 1:
p = heapq.heappop(queue)
if k == 0:
return p
k -= 1