题解 | #寻找第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];
}
}
安克创新 Anker公司福利 621人发布