自己犯错的坑点QAQ

寻找第K大

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

假的快排

class Finder {
public:

    int serch(vector<int> &a,int l,int r,int k)
    {
        if(l == r)
        {
            return a[l];
        }
        int i = l - 1,j = r + 1;

        int mid = (i + j) >> 1;

        while(i < j)
        {
            // 这个mid可能被我拿来交换了
            // 这里这样写  mid可能变了 那么就会GG  
            // 最好还是 int x = a[(l + r) >> 1] 这样保证一定是按照x分成两边的
            do i++;while(a[i] < a[mid]); 、
            do j--;while(a[j] > a[mid]);
            if(i < j)
            {
                swap(a[i],a[j]);
            }
            else break;
        }

        if((j - l + 1) >= k) return serch(a,l,j,k);
        else return serch(a,j + 1,r,k - (j - l + 1));

        //l,j;
        //j + 1,r;

    }

    int findKth(vector<int> a, int n, int K) {

        return serch(a,0,n - 1,n - K + 1);
    }
};
全部评论

相关推荐

三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务