剑指 Offer 53 - I. 在排序数组中查找数字 I
统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
限制:
0 <= 数组长度 <= 50000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof
二分法查找
代码如下:
class Solution {
public:
int search(vector<int>& nums, int target) {
if(nums.size() == 0)
{
return 0;
}
int left = 0;
int right = nums.size()-1;
int mid;
int count = 0;
while(left<=right) //二分查找target所在位置
{
mid = (left+right)>>1;
if(nums[mid] == target)
{
break;
}
else
{
if(nums[mid]>target)
{
right = mid-1;
}
else
{
left = mid+ 1;
}
}
}
if(left > right) //若数组nums中不存在target
{
return 0;
}
for(int i = mid+1;i<nums.size();i++) //从二分查找得到的位置向右扫描
{
if(nums[i] == target)
{
count++;
}
else
{
break;
}
}
for(int i = mid-1;i>=0;i--) //从二分查找得到的位置向左扫描
{
if(nums[i] == target)
{
count++;
}
else{
break;
}
}
return count+1; //结果需加上二分查找得到的位置
}
};