题解 | #寻找第K大#

寻找第K大

http://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf

找到第K大的数,也就是找到数组排序后位于n-K位置的数,利用快排的partation函数,可以得到一个数的位置index。如果index == n-k,则返回,如果小于index 则在做边区间去找,如果大于则在右半区间找。

import java.util.*;

public class Solution {
    public int findKth(int[] a, int n, int K) {
        int i = 0, j = n - 1, t = n - K;
        while(i < j){
            int index = partation(a, i, j);
            if(index == t){
                return a[index];
            }
            if(index > t){
                j = index - 1;
            }else {
                i = index  + 1;
            }
        }
        return a[i];

    }

    int partation(int[] arr, int left, int right){
        int temp = arr[left];
        while(left < right) {
            while(left < right && arr[right] >= temp){
              right --;
            }
            arr[left] = arr[right];
            while(left < right && arr[left] < temp){
                left ++;
            }
            arr[right] = arr[left];
        }
        arr[left] = temp;

        return left;
    }
}
全部评论

相关推荐

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