题解 | #寻找第K大#

寻找第K大

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

class Solution {
public:
    int findKth(vector<int> a, int n, int K) {
        return qfindKth(a, 0, n-1, K);
    }
    int qfindKth(vector<int> &a, int left, int right, int K){//自己构建的快速排序算法
        int l = left,r = right;
        int ans = a[left];
        while(l<r){
            while(l<r && a[r] <= ans) r--;
            a[l] = a[r];

            while(l<r && a[l] >= ans) l++;
            a[r] = a[l];
        }
        a[l] = ans;
        if(l == K-1) return a[l];//如果已经是第k个了,就返回,否则就接着快速排序
        else if(l > K-1) return qfindKth(a, 0, l-1, K);
        else return qfindKth(a,l+1, right,K);
    }
};
全部评论

相关推荐

某牛奶:一觉醒来全球程序员能力下降200%,小伙成功scanf惊呆在座个人。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务