Quick Select
基于快排模板的快选算法,注意最后两个 if 条件中的 <= >=
class Solution:
"""
@param n: An integer
@param nums: An array
@return: the Kth largest element
"""
def kthLargestElement(self, k, nums):
if not nums or n < 1 or n > len(nums):
return None
return self.quickSelect(nums, 0, len(nums) - 1, len(nums) - k)
def quickSelect(self, nums, start, end, k):
if start == end:
return nums[k]
left, right = start, end
pivot = nums[(start + end) // 2]
while left <= right:
while left <= right and nums[left] < pivot:
left += 1
while left <= right and nums[right] > pivot:
right -= 1
if left <= right:
nums[left], nums[right] = nums[right], nums[left]
left += 1
right -= 1
if k <= right:
return self.quickSelect(nums, start, right, k)
if k >= left:
return self.quickSelect(nums, left, end, k)
return nums[k]最后更新于
这有帮助吗?