剑指offer(34)-数字在排序数组中出现的次数

来源:互联网 发布:mac安装什么杀毒软件 编辑:程序博客网 时间:2024/06/06 02:03

题目描述


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

代码


class Solution {    /*二分查找 找到第一个K 和 最后一个K 二者位置相减*/public:    int GetNumberOfK(vector<int> data ,int k) {        if(data.empty())            return 0;        int number = 0;        int first = GetFirstIndex(data,k,0,data.size()-1);        int last = GetLastIndex(data,k,0,data.size()-1);        if(first>-1 && last>-1)            number = last - first +1;        return number;    }    int GetFirstIndex(vector<int> &data,int k,int start,int end){        if(start > end)            return -1;        int mid = (start+end)/2;        if(data[mid] == k){            if((mid > 0 && data[mid-1] != k) || mid == 0)                return mid;            else                end = mid-1;        }        else{            if(mid > k)                end = mid - 1;            else                start = mid + 1;        }        return GetFirstIndex(data,k,start,end);    }    int GetLastIndex(vector<int> &data,int k,int start,int end){        if(start > end)            return -1;        int mid = (start+end)/2;        if(data[mid]==k){            if((mid>0 && data[mid+1] !=k) || mid == end)                return mid;            else                start = mid +1;        }        else{            if(mid>k)                end = mid-1;            else                start = mid+1;        }        return GetLastIndex(data,k,start,end);    }};
0 0
原创粉丝点击