自己实现的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;
}
};