【劍指offer-解題系列(38)】數字在排序數組中出現的次數

題目描述

統計一個數字在排序數組中出現的次數。

分析

實現二分查找的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;
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章