lintcode python解法

5、第K大元素

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

挑战

要求时间复杂度为O(n),空间复杂度为O(1)。

最直接的想法是先对数组进行从大到小的排序,然后返回下标 k-1 的元素

 1 class Solution:
 2     """
 3     @param n: An integer
 4     @param nums: An array
 5     @return: the Kth largest element
 6     """
 7 
 8     def kthLargestElement(self, n, nums):
 9         if not nums or n > len(nums):
10             return None
11         return self.quicSort(nums, 0, len(nums)-1)[n-1]
12 
13     def quicSort(self, nums, start, end):
14         if start < end:
15             key_index = self.pation(nums, start, end)
16             self.quicSort(nums, start, key_index)
17             self.quicSort(nums, key_index+1, end)
18         return nums
19 
20     def pation(self, nums, start, end):
21         mark = nums[start]
22         while start < end:
23             while nums[end] <= mark and start < end:
24                 end -= 1
25             if start < end:
26                 nums[start] = nums[end]
27             while nums[start] > mark and start < end:
28                 start += 1
29             if start < end:
30                 nums[end] = nums[start]
31         nums[start] = mark
32         return start
 

猜你喜欢

转载自www.cnblogs.com/longchaos/p/10468913.html
今日推荐