自己实现的lowerbound和upperbound

2019-04-01  本文已影响0人  Songger
class Solution {
private:
    int lower_bound_mine(vector<int>& data, int k){
        int begin = 0;
        int end = data.size() - 1;
        while(begin <= end){
            int mid = (begin + end) / 2;
            if(data[mid] == k && ((mid == begin) || data[mid - 1] < k)) return mid;
            else if(data[mid] >= k) end = mid - 1;
            else begin = mid + 1;
        }
        return begin; //this is important
    }
    int upper_bound_mine(vector<int>& data, int k){
        int begin = 0;
        int end = data.size() - 1;
        while(begin <= end){
            int mid = (begin + end) / 2;
            if(data[mid] == k && ((mid == end) || data[mid + 1] > k)) return mid;
            else if(data[mid] <= k) begin = mid + 1;
            else end = mid - 1;
        }
        return end;
    }
public:
    int GetNumberOfK(vector<int> data ,int k) {
        return upper_bound_mine(data, k) - lower_bound_mine(data, k) + 1;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读