题解 | #寻找第K大#

寻找第K大

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

快排每次可以确定最终有序序列的一个位置i,若改位置就是要找到第K大,则返回,若改数小于第K大,处理右边,否则,处理左边。size - i就是第(size - i)大的数。

class Solution {
public:
    int idx;
    int size;
    int findKth(vector<int> a, int n, int K) {
        // write code here
        idx = K;
        size = n;
        return qsort(a,0,n-1);
    }

    int qsort(vector<int> &arr,int left,int right){
        int i = left,j = right;
        int base = arr[left];
        while (i < j) {
            while (arr[j] >= base && i <j) j--;
            while(arr[i] <= base && i < j) i++;
            if (i < j){
                swap(arr[i],arr[j]);
            }
        }
        swap(arr[left],arr[i]);
        //此时已确定排序中第i大的数
        if (size - i == idx) {
            return arr[i];
        }else if(size- i < idx){
            return qsort(arr, left, i - 1);//处理左边
        }else{
            return qsort(arr, i+1, right);//处理右边
        }
    }
};
全部评论

相关推荐

10-05 11:11
海南大学 Java
投票
理想江南137:感觉挺真诚的 感觉可以试一试
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务