Lintcode 5. 第k大元素

来源:互联网 发布:学单片机看什么书 编辑:程序博客网 时间:2024/04/30 06:41

在数组中找到第k大的元素

如:给出数组 [9,3,2,4,8],第三大的元素是 4

解法:利用快速排序的思想,但这里每次快排完成后,只需对前后两部分中的一部分进行排序,计算可知时间复杂度为O(N)

class Solution:    # @param k & A a integer and an array    # @return ans a integer    def kthLargestElement(self, k, A):        return self.quick_Sort(A,0,len(A)-1,k)            def quick_Sort(self, nums, left, right, k):        i = left        j = right        tmp = nums[left]        while i<j:            while i<j and tmp>=nums[j]:                j -= 1            if i<j:                nums[i] = nums[j]                i += 1            while i<j and tmp< nums[i]:                i += 1            if i<j:                nums[j] = nums[i]                j -= 1        nums[i] = tmp        if i == k-1:            return nums[i]        elif i < k-1:            return self.quick_Sort(nums,i+1,right,k)        else:            return self.quick_Sort(nums,left,i-1,k)