zoukankan      html  css  js  c++  java
  • 数字在排序数组中出现的次数

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

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

    //非递归实现二分查找(第一个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;
            
               
        }
  • 相关阅读:
    webApi2 结合uploadify 上传报错解决办法
    对特殊字符进行转移
    数据库事务MTDC出错解决办法
    查询数据所有的外键关系
    查询SQL阻塞语句
    Django介绍
    Docker简介
    Docker CE部署
    jQuery快速入门
    系统批量运维管理器paramiko详解
  • 原文地址:https://www.cnblogs.com/wft1990/p/7447312.html
Copyright © 2011-2022 走看看