python3数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array
解题思路:
1.数组无序
2.可能有重复元素
3.找到第k个最大的元素,而不必对数组其他元素进行排序
(可以暴力查询,排序sorted(nums)[-k],但是毕竟是medium 类型,故不考虑)
看官方的解答方法,利用快排的思想,由于最终的结果只需要返回某一个符合条件的元素,而无需对数组进行排序,所以在快排算法的基础上做出改进。
代码实现:
1 class Solution(object): 2 def findKthLargest(self, nums, k): 3 """ 4 :type nums: List[int] 5 :type k: int 6 :rtype: int 7 """ 8 if k > len(nums): 9 return 10 index = randint(0,len(nums)-1) 11 pivot = nums[index] 12 small=[i for i in (nums[:index]+nums[index+1:])if i < pivot] 13 large=[i for i in (nums[:index]+nums[index+1:])if i >= pivot] 14 15 if k-1 == len(large): 16 return pivot 17 elif k-1<len(large): 18 return self.findKthLargest(large,k) 19 if k-1 > len(large): 20 return self.findKthLargest(small,k-len(large)-1)