题目所属分类
快速选择算法
快选是基于快排
原题链接
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。
代码案例:输入: [3,2,1,5,6,4], k = 2
输出: 5
题解
可以参考这篇文章 传送门
class Solution {
public int findKthLargest(int[] nums, int k) {
return quick_sort(nums , 0 , nums.length - 1 , k -1 );
}
public int quick_sort(int[] a , int l , int r ,int k){
if(l>=r)return a[l] ;
int x = a[(l+r) >> 1] ,i = l -1 , j = r + 1 ;
while(i < j){
while(a[++i] > x) ;
while(a[--j] < x) ;
if(i < j){
int t = a[i];
a[i] =a[j];
a[j] = t ;
}
}
if( k <= j) return quick_sort(a , l , j , k );
else return quick_sort(a , j + 1 , r , k ) ;
}
}