NC88 寻找第K大
描述
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(1<=K<=n),请返回第K大的数(包括重复的元素,不用去重),保证答案存在。
示例1
输入:
[1,3,5,2,2],5,3
复制
返回值:
2
复制
示例2
输入:
[10,10,9,9,8,7,5,6,4,3,4,2],12,3
复制
返回值:
9
复制
说明:
去重后的第3大是8,但本题要求包含重复的元素,不用去重,所以输出9
import java.util.*;
public class Solution {
public int findKth(int[] a, int n, int K) {
// write code here
if(a == null){
return -1 ;
}
return quelickSort(a , 0 , n-1 , K);
}
public int quelickSort(int[] num , int start , int end , int k){
if(start == end){
return num[start] ;
}
int left = start , right = end ;
int pivot = num[(left + right)/2];
while(left <= right){
while(left <= right && num[right] < pivot){
right-- ;
}
while(left <= right && num[left] > pivot){
left++ ;
}
if(left <= right){
int temp = num[left] ;
num[left] = num[right];
num[right] = temp ;
left++ ;
right-- ;
}
}
if( k -1 <= right){
return quelickSort(num , start , right , k);
}
if( k -1 >= left){
return quelickSort(num , left , end , k);
}
return num[right + 1] ;
}
}
227

被折叠的 条评论
为什么被折叠?



