剑指 Offer 53 - I. 在排序数组中查找数字 I
思路一:二分单边 + 线性扫描
先用一次二分查找找到边界,再再边界里面寻找目标值
class Solution {
public:
int search(vector<int>& nums, int target) {
int low=0;
int high=nums.size()-1;
int res=0;
//判断只有一个数的情况
// if(nums.size()==1){
// if(nums[0]==target){
// res++;
// return res;
// }
// }
//二分查找找到目标值所在的边界
while(low<=high){
int mid = (low+high)/2;
if(nums[mid]<target){
low = mid+1;
}else if(nums[mid]>target){
high = mid-1;
}else {
break;
}
}
//在边界里面寻找目标值
for(int i=low;i<=high;i++){
if(nums[i]==target){
res++;
}
}
return res;
}
};
思路二:两次二分查找,找到左右边界,最终结果为right-left-1