#include<iostream>
#include<vector>
using namespace std;
int binarySearch(vector<int> data, int k, int low, int high){
while(low <= high){ //必须加等号,否则此例中5将找不到
int mid = (low + high) / 2;
if(data[mid] == k)
return mid;
else if(data[mid] > k)
high = mid - 1;
else
low = mid + 1;
}
return -1; //没有找到
}
int GetNumberOfK(vector<int> data ,int k) {
int size = data.size();
int ret = binarySearch(data, k, 0, size - 1);
if(ret == -1)
return 0;
int retL = ret;
int retR = ret;
if(ret >= 0 && ret <= size - 1){
while(retL > 0 && data[retL - 1] == k){
retL = binarySearch(data, k, 0, ret - 1);
}
while(retR < size - 1 && data[retR + 1] == k){
retR = binarySearch(data, k, retR + 1, size - 1);
}
}
return retR - retL + 1;
}
int main(){
vector<int> v{2, 3, 3, 3, 5};
//int ret = GetNumberOfK(v, 1);
//int ret = GetNumberOfK(v, 3);
//int ret = GetNumberOfK(v, 2);
int ret = GetNumberOfK(v, 5);
cout<<ret;
return 0;
}
参照二分查找:https://blog.youkuaiyun.com/weixin_40804971/article/details/85041902)