题解 | #寻找第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 findK(a, 0, n - 1, k - 1);
    }

    public int findK(int[] a, int start, int end, int k){
        if(start >= end){
            return a[start];
        }

        int left = start, right = end;
        int midV = a[left + (right - left)/2];
        while(left <= right){
            while(a[left] > midV){left++;}
            while(a[right] < midV){right--;}
            if(left <= right){
                int temp = a[left];
                a[left] = a[right];
                a[right] = temp;
                left++;
                right--;
            }
        }
        if(k <= right){
            return findK(a, start, right, k);
        }else if( k >= left){
            return findK(a, left, end, k);
        }else{
            return a[k];
        }
    }
}
全部评论

相关推荐

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