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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM