【剑指offer-解题系列(38)】数字在排序数组中出现的次数

来源:互联网 发布:stc单片机isp原理 编辑:程序博客网 时间:2024/05/12 17:21

题目描述

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

分析

实现二分查找的upper函数和lower函数

代码实现

    int GetNumberOfK(vector<int> data ,int k) {
        if(data.size()<=0)
            return 0;
        int a=lower( data ,  k,  0,  data.size()-1);
        if(a==-1)
            return 0;
        int b=upper( data ,  k,  0,  data.size()-1); 
        return b-a+1;
    }
    


    int upper(vector<int> &data ,int k,  int start, int end){
        if(start == end ){
            if(data[end] == k)return end;
            else return -1;
        }
        int mid =  (start + end)/2;
        if( data[mid] >  k  )return upper( data ,  k ,   start,   mid);
        if( data[mid] <  k  )return upper( data ,  k ,   mid+1,   end);


        if( data[mid] ==  k  ){
            if( mid<end&&data[mid+1]!=k  )
                return mid;
            else
                return upper( data ,  k ,   mid+1,   end);
        }
        return -1;
    }


    int lower(vector<int> &data ,int k,  int start, int end){
        if(start == end ){
            if(data[end] == k)return end;
            else return -1;
        }
        int mid =  (start + end)/2;
        if( data[mid] >  k  )return lower( data ,  k ,   start,   mid);
        if( data[mid] <  k  )return lower( data ,  k ,   mid+1,   end);


        if( data[mid] ==  k  ){
            if( mid>start&&data[mid-1]!=k  )
                return mid;
            else
                return lower( data ,  k ,  start,   mid);
        }
        return -1;
    }

阅读全文
0 0
原创粉丝点击