二分法查找
注意:
1、升序--->二分
2、先找到一个数,然后向两边找
3、注意保存mid的值,方便作为反向查找的起点
4、多次统计注意区分
代码
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int l = 0;
int r = data.size()-1;
int res = 0;
while(l<=r){
int mid = (l+r)/2;
if(data[mid] == k){
int tmp_mid = mid;
while(mid>=0 && data[mid]==k){
res++;
mid--;
}
while(tmp_mid<=data.size()-1 && data[tmp_mid]==k){
res++;
tmp_mid++;
}
return res-1;
}
else if(data[mid]>k){
r = mid-1;
}
else{
l = mid+1;
}
}
return 0;
}
}; 
京公网安备 11010502036488号