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

Posted 泡面小王子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字在排序数组中出现的次数相关的知识,希望对你有一定的参考价值。

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

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

 

//非递归实现二分查找(第一个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;
        
           
    }

 

以上是关于数字在排序数组中出现的次数的主要内容,如果未能解决你的问题,请参考以下文章

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

剑指Offer——数字在排序数组中出现的次数

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

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

php如何实现统计一个数字在排序数组中出现的次数(代码)

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