题解 | #寻找第K大#

寻找第K大

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

public:
    int partition(vector<int>& a,int i,int j){
        /*
        1.k值更新
        2.第k大而不是从左往右第k大
        */
        int key = a[i];
         while(i<j){
            while(i<j&&a[j]<=key)
                j--;
            a[i] = a[j];
            while(i<j&&a[i]>key)
                i++;
            a[j] = a[i];        
        }
        a[i] = key;
        return i;
    }
    int findKth(vector<int> a, int n, int K) {
        // write code here
        int left=0;
        int right=n-1;
        int k = partition(a,left, right);
        while(1){
             if(k==K-1) return a[k];
             else if(k<K-1){
                k = partition(a, k+1, right);
             }else if(k>K-1){
                k= partition(a, left, k-1);
             }
        }
        
    }
};

本来一眼就出了思路,因为注释里的脑残失误,看了一个小时才看出来,简单题掉以轻心,死的最惨!!!!!

全部评论

相关推荐

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