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
原文:https://www.cnblogs.com/longchaos/p/10468913.html