剑指offer-数字在排序数组中出现的次数

二分

    int GetNumberOfK(vector<int> data ,int k) {
        int l=0,r=data.size()-1;
        int m=(l+r)/2;
        bool isfind=false;
        int pos=-1;
        while(!isfind && l<=r)
        {
            if(k>data[m])
             {
                l=m+1;
                m=(l+r)/2;
            }
            else if(km])
             {
                r=m-1;
                m=(l+r)/2;
            }
            else 
            {
                isfind=true;
                pos=m;
            }
        }
       if (pos==-1) return 0;
       int sum=1,index=pos+1;
       while(indexindex]==data[pos]) 
       {
           index++;
           sum++;
       }
       index=pos-1;
       while(index>=0 && data[index]==data[pos])
       {
           index--;
           sum++;
       }
       return sum;
    }

你可能感兴趣的:(数据结构与算法)