题解 | #寻找第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
        return findKth_(a,0,n-1,K);
    }
    public static int findKth_(int[] arry,int low,int hei,int k){
        /*if (hei-low<1){
            return;
        }*/
        int midValue = arry[low];
        int start = low;
        int end = hei;
        while (end>start){
            while (end>start&&midValue<arry[end]){
                end--;
            }
            if (start<end&&midValue>arry[end]){
                arry[start++]=arry[end];
            }
            while (start<end&&midValue>arry[start]){
                start++;
            }
            if (start<end){
                arry[end--]=arry[start];
            }

        }
        arry[end]=midValue;
       if (hei-end==k-1){
            return arry[hei-k+1];
        }else if(hei-end<k-1){
            return findKth_(arry,low,start-1,k-hei+start-1);
        }else{
            return findKth_(arry,start+1,hei,k);
        }
    }
}
全部评论

相关推荐

10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务