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)

 

posted @ 2020-08-07 11:54  菠菜猫  阅读(1697)  评论(0编辑  收藏  举报