215. 数组中的第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

说明:

你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        n=len(nums)
        target=n-k 
        left=0
        right=n-1
        def partition(left,right):
            rand_idx=random.randint(left,right)
            nums[rand_idx],nums[left]=nums[left],nums[rand_idx]
            privot=nums[left]
            while left<right:
                while left<right and nums[right]>=privot:right-=1#先找右边否则会把右边的盖掉
                nums[left]=nums[right]
                while left<right and nums[left]<=privot:left+=1
                nums[right]=nums[left]
            nums[left]=privot
            return left         
        while True:
            idx=partition(left,right)
            if idx==target:
                return nums[idx]
            elif idx>target:
                right=idx-1
            else:
                left=idx+1

        

 

©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页