LeetCode215. 数组中的第K个最大元素
- 题目:给定整数数组
nums
和整数k
,请返回数组中第k
个最大的元素。 - 示例:输入:
[3,2,1,5,6,4] 和
k = 2 输出: 5
使用快速排序实现时间复杂度为O(n),空间复杂度为O(logn)的算法:
1 class Solution: 2 def findKthLargest(self, nums: List[int], k: int) -> int: 3 4 def partPos( arr , left , right ): 5 #初始化最右端为比较数 6 pivot = arr[right] 7 i = left 8 for j in range(left,right+1): 9 #将所有arr[j]<=pivot的数字与arr[i]交换,i+1 10 if arr[j]<=pivot: 11 arr[i],arr[j] = arr[j],arr[i] 12 i += 1 13 #返回当前pivot位置i-1,此时i-1左右被pivot分开 14 return i-1 15 16 def quickSort( arr , left , right , distance ): 17 #一次快排,返回中间位置 18 pos = partPos( arr , left , right ) 19 #当前位置距离right==distance立即返回,否则递归查找 20 if right-pos+1 == distance: 21 return arr[pos] 22 elif right-pos+1 < distance: 23 return quickSort( arr , left , pos-1 , distance-(right-pos+1) ) 24 elif right-pos+1 > distance: 25 return quickSort( arr , pos+1 , right , distance ) 26 27 return quickSort( nums , 0 , len(nums)-1 , k )