【剑指offer】统计一个数字在排序数组中出现的次数

来源:互联网 发布:半条命2剧情知乎 编辑:程序博客网 时间:2024/06/05 10:26

class Solution {public:    int GetNumberOfK(vector<int> data ,int k) {        int number = 0;        if(data.size() == 0)            return number;        int first = GetFirstOfK(data,k,0,data.size()-1);        int last = GetLastOfK(data,k,0,data.size() - 1);        if(first > -1 && last > -1)            return last - first + 1;        return number;    }    int GetFirstOfK(vector<int> &data,int k,int low,int high){        while(low <= high){            int mid = (low + high) / 2;            if(data[mid] == k){                if(mid == 0 || (mid > 0 && data[mid-1] != k)){                    return mid;                }else{                high = mid - 1;            }            }else if(data[mid] > k){                high = mid - 1;            }else{                low = mid + 1;            }        }        return -1;    }    int GetLastOfK(vector<int> &data,int k,int low,int high){        while(low <= high){            int mid = (low + high) / 2;            if(data[mid] == k){                if( (mid == data.size() - 1) || ((mid < data.size() - 1) && data[mid+1] != k)){                    return mid;                }else{                low = mid + 1;            }            }else if(data[mid] > k){                high = mid - 1;            }else{                low = mid + 1;            }        }        return -1;    }};

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

思路:找到第一个K位置,找到最后一个K的位置,然后相减加一。利用二分查找。


0 0
原创粉丝点击