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); }