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


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

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

    //非递归实现二分查找(第一个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;
            
               
        }
  • 相关阅读:
    HTML初步学习7
    HTML初步学习6
    HTML初步学习5
    HTML初步学习4
    poj3449Geometric Shapes
    poj2074Line of Sight(直线相交)
    2014 Multi-University Training Contest 4
    poj3347Kadj Squares
    poj1556The Doors
    poj3608Bridge Across Islands(凸包间最小距离)
  • 原文地址:https://www.cnblogs.com/wft1990/p/7447312.html
Copyright © 2020-2023  润新知