您的位置:首页 > Web前端

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

2017-05-29 22:25 399 查看


题目描述

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

分析

实现二分查找的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;

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: