数字在排序数组中出现的次数

统计一个数字在排序数组中出现的次数。

思路:“排序数组”,需要找数,则使用二分查找。

//非递归实现二分查找(第一个k出现的位置)
    int getFirstK(vector<int>&data,int k)
    {
        int len=data.size();
        int start=0;
        int end=len-1;
        while(start<=end)
        {
            int mid=(start+end)/2;
            if(data[mid]>k)
               end=mid-1;
            else if(data[mid]<k)
                start=mid+1;
            else
            {//如果中间的数字的前面一个数字不是k,此时这个数字刚好就是第一个k
               if(mid>0&&data[mid-1]!=k||mid==0)
                   return mid;
                else
                   end=mid-1;
            }
        }
       return -1;
    }
     //非递归实现二分查找(最后一个k出现的位置)
    int getLastK(vector<int>&data,int k)
    {
        int len=data.size();
        int start=0;
        int end=len-1;
        while(start<=end)
        {
            int mid=(start+end)/2;
            if(data[mid]>k)
            end=mid-1;
            else if(data[mid]<k)
               start=mid+1;
            else
            {//同理,中间数是k,往后查找下一个数不是k,则这个数刚好是最后一个k
               if(mid<len-1&&data[mid+1]!=k||mid==len-1)
                   return mid;
               else
                   start=mid+1;
            }
        }
         return -1;
    }
    int GetNumberOfK(vector<int> data ,int k) {
        if(data.size()==0) return 0;
        int firstK=getFirstK(data,k);
        int lastK=getLastK(data,k);
        if(firstK==-1||lastK==-1) return 0;
        
        return lastK-firstK+1;
        
           
    }
原文地址:https://www.cnblogs.com/wft1990/p/7447312.html