题目链接:LeetCode215
题目
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入:[3,2,1,5,6,4] 和 k = 2 输出: 5
示例 2:
输入:[3,2,3,1,2,4,5,5,6] 和k = 4 输出: 4
说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
解答思路:
快排之后直接返回第k大的数,没有太多技巧可言。直接上代码咯
import random
class Solution(object):
def findKthLargest(self, arr, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
if len(arr) < 2:
return arr[0]
res = self.q_sort(arr,0,len(arr)-1)
return res[-k]
def q_sort(self,arr,l,r):
if l < r:
rand = random.randint(l,r)
arr[rand],arr[r] = arr[r],arr[rand]
p = self.partition(arr,l,r)
self.q_sort(arr,l,p[0])
self.q_sort(arr,p[1],r)
return arr
def partition(self,arr,l,r):
lo,hi,cur = l-1,r,l
while cur < hi:
if arr[cur] < arr[r]:
lo += 1
arr[lo],arr[cur] = arr[cur],arr[lo]
cur += 1
elif arr[cur] > arr[r]:
hi -= 1
arr[hi],arr[cur] = arr[cur],arr[hi]
else:
cur += 1
arr[hi],arr[r] = arr[r],arr[hi]
return [lo,hi+1]