数组中的第K个最大元素
中英题面
在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
Find thekth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
示例 1:
输入: <code>[3,2,1,5,6,4] 和</code> k = 2 输出: 5
For example,
Given[3,2,1,5,6,4]
and k = 2, return 5.
示例2:
输入: <code>[3,2,3,1,2,4,5,5,6] 和</code> k = 4 输出: 4
说明:
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
Note:
You may assume k is always valid, 1 ≤ k ≤ array's length.
算法
利用快速排序的思想查找第K大数。
平均时间复杂度:
O(N)
最坏时间复杂度:
O(N2)
平均空间复杂度:
O(N)
最坏空间复杂度:
O(N2)
代码
1 class Solution: 2 def findKthLargest(self, nums, k): 3 """ 4 :type nums: List[int] 5 :type k: int 6 :rtype: int 7 """ 8 hen = 0 9 tai = len(nums) - 1 10 mid = nums[tai // 2] 11 while (hen <= tai): 12 while (nums[hen] > mid): 13 hen += 1 14 while (nums[tai] < mid): 15 tai -= 1 16 if (hen <= tai): 17 nums[hen], nums[tai] = nums[tai], nums[hen] 18 hen += 1 19 tai -= 1 20 if (k - 1 <= tai): 21 return self.findKthLargest(nums[: tai + 1], k) 22 if (k - 1 >= hen): 23 return self.findKthLargest(nums[hen :], k - hen) 24 return nums[k - 1]