在未排序的數組中找到第 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)