题解 | #寻找第K大#
寻找第K大
http://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf
解题思路:
二分法
import java.util.*; public class Solution { public int findKth(int[] a, int n, int K) { // write code here int index=n-K;//增排序中最终结果数字的序号 return quick_sort(a,0,a.length-1,index); } int quick_sort(int[] arr,int left,int right,int index)//在快速排序的基础上增加了需要寻找的数据的序号 { if(left<right) { int i=left,j=right,x=arr[left]; while (i < j) { while(i < j && arr[j] >= x) // 从右向左找第一个小于x的数 j--; if(i < j) arr[i++] = arr[j]; while(i < j && arr[i] < x) // 从左向右找第一个大于等于x的数 i++; if(i < j) arr[j--] = arr[i]; } arr[i]=x; if(i>index) quick_sort(arr,left,i-1,index);//递归的时候进行部分递归,减少工作量 else if(i<index) quick_sort(arr,i+1,right,index); else return arr[i]; } return arr[index]; } }