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]

最后更新于

这有帮助吗?