题目描述:
统计一个数字在排序数组中出现的次数。
示例1:
输入: nums = [5,7,7,8,8,10], target = 8 输出: 2
示例2:
输入: nums = [5,7,7,8,8,10], target = 6 输出: 0
解题思路:
首先想到的方法是遍历,直到找到大于target的数为止,代码如下:
class Solution {
public:
int search(vector<int>& nums, int target) {
int sum = 0;
for(int i=0; i<nums.size(); ++i)
{
if(nums[i]>target)
{
break;
}
if(target==nums[i])
{
sum++;
}
}
return sum;
}
};
方法2是二分法,解法如下:
代码如下:
class Solution {
public:
int findBehind(vector<int>& nums, int target)
{
int left = 0;
int right = nums.size()-1;
while(left<=right)
{
int mid = left + (right-left)/2;
if(nums[mid]<=target)
{
left = mid+1;
}
else
{
right = mid-1;
}
}
return left;
}
int search(vector<int>& nums, int target) {
return findBehind(nums, target) - findBehind(nums, target-1);
}
};