Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4] and k = 2, return 5.
Note:
You may assume k is always valid, 1 ≤ k ≤ array's length.
内部有sort命令,找到第k个大的
class Solution(object):
def findKthLargest(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
return sorted(nums, reverse=True)[k - 1]
参考:
http://bookshadow.com/weblog/2015/05/23/leetcode-kth-largest-element-array/
O(n)解法:快速选择算法
import random
class Solution(object):
def findKthLargest(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
r=random.choice(nums)
nums1=[] #存比r大的数
nums2=[] #<span style="font-family: Arial, Helvetica, sans-serif;">存比r小的数</span>
for num in nums:
if num>r:
nums1.append(num)
elif num<r:
nums2.append(num)
if k<=len(nums1):<span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;"> #在nums1里找第k个</span><span style="font-family: Arial, Helvetica, sans-serif;">
</span> return self.findKthLargest(nums1,k)
if k>len(nums)-len(nums2): #在nums2里找第 <span style="font-family: Arial, Helvetica, sans-serif;">k-(len(nums)-len(nums2)) 个</span>
return self.findKthLargest(nums2,k-(len(nums)-len(nums2)))
return r