1.先快排
2.倒序遍历,如果相邻数据不重复k--,重复k不变
3.当k=1时,就是第K大数据
public int findKth(int[] a, int n, int K) {
// write code here
qkSort(a,0,n-1);
int index = K;
for(int i=n-1;i>=0;i--){
if(i != n-1){
--index;
if(a[i]==a[i+1]){
++index;
}
}
if(index==1){
return a[i];
}
}
return index;
}
/**
* 快排
* @param a
* @param low
* @param len
*/
public static void qkSort(int[] a, int low, int len){
if(low>len)return;
int i=low;//左侧指针
int j=len;//右侧指针
int root = a[low];
int temp;
while(i<j){
while(i<j && a[j]>=root)j--;//=重点,先右
while(i<j && a[i]<=root)i++;
if(i<j){
temp = a[i];
a[i]=a[j];
a[j]=temp;
}
}
a[low] = a[i];
a[i] = root;
qkSort(a,low,j-1);//先左
qkSort(a,j+1,len);
} 
京公网安备 11010502036488号