题解 | #寻找第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 static int findK(int[] nums, int start, int end, int k){
        int left = start, right = end;
        int x = nums[left + (right - left)/2];
        while(left <= right){
            while (left <= right && nums[left] > x) {
                left++;
            }
            while (left <= right && nums[right] < x) {
                right--;
            }
            if(left <= right){
                int temp = nums[left];
                nums[left] = nums[right];
                nums[right] = temp;
                left++;
                right--;
            }
        }
        if(k <= right) {
            return findK(nums, start, right, k);
        }else if(k >= left){
            return findK(nums, left, end, k);
        }else{
            return nums[k];
        }
    }
}
全部评论

相关推荐

11-21 13:04
已编辑
门头沟学院 算法工程师
点赞 评论 收藏
分享
10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务