1.题目描述
统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
限制:
0 <= 数组长度 <= 50000
2.二分查找法
(1)解题思路
排序数组中的搜索问题,首先想到 二分法 解决。
(2)方法一:右边界 - 左边界 - 1
(3)方法二:目标值的右边界 - (目标值 - 1)的右边界
通过二分法找到target的右边界,再找到target-1的右边界。后者-前者。
3.C++代码
方法二:
class Solution {
public:
int search(vector<int>& nums, int target)
{
return findTargetRightBoundary(nums,target)-findTargetRightBoundary(nums,target-1);
}
int findTargetRightBoundary(vector<int>& nums, int target)
{
int i=0,j=nums.size()-1;
while(i<=j)
{
int m=i+(j-i)/2;
if(nums[m]<=target) i=m+1;//更新左边界
else j=m-1;//更新右边界
}
return i;
}
};