215. 数组中的第K个最大元素(medium)

2019-06-19  本文已影响0人  genggejianyi

在未排序的数组中找到第 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(object):  
    def partition(self,a,lo,hi):
        pivot = a[lo]# 选取第一个为枢轴值
        while lo < hi:
            while lo < hi and a[hi] <= pivot:
                hi -= 1
            a[lo] = a[hi]
            while lo < hi and a[lo] >= pivot:
                lo += 1
            a[hi] = a[lo]
        a[lo] = pivot
        return lo
    def findKthLargest(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        return self.quicksort(nums,0,len(nums)-1,k)
    def quicksort(self,nums,begin,end,k):
        if begin >= end:
            return nums[begin]
        mid = self.partition(nums,begin,end)
        if mid == k-1:
            return nums[mid]
        elif mid > k-1:
            return self.quicksort(nums,0,mid-1,k)
        else:
            return self.quicksort(nums,mid+1,end,k)
上一篇下一篇

猜你喜欢

热点阅读