题解 | #寻找第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];
    }

}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务