leetcode(61)-数组中的第K大的元素

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

使用random 会极大的降低用时

from random import randint
class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        if k > len(nums):
            return
        index = randint(0,len(nums)-1)
        pivot = nums[index]
        lt=[i for i in (nums[:index]+nums[index+1:])if i < pivot]
        ge=[i for i in (nums[:index]+nums[index+1:])if i >= pivot]
        len_lt = len(lt)
        len_ge = len(ge)
        if len_ge == k -1:
            return pivot
        elif len_ge< k-1:
            return self.findKthLargest(lt,k-1-len_ge)
        elif len_ge>= k:
            return self.findKthLargest(ge,k)

posted @ 2020-10-26 13:02  木子士心王大可  阅读(83)  评论(0)    收藏  举报