DAY5. 在排序数组中查找数字 I
统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
nums
是一个非递减数组-109 <= target <= 109
/*
解法1:哈希存储数字出现的次数,遍历即可
*/
class Solution {
public:
int search(vector<int>& nums, int target) {
map<int,int> ma;
vector<int>::iterator it;
for(it=nums.begin();it!=nums.end();it++)
{
ma[*it]++;
}
return ma[target];
}
};
/*
解法2:官方解法,二分找到第一个大于等于target的值的下标,再找到第一个大于target的值的下标,相减加1就是该数字出现的次数
*/
class Solution {
public:
int binarysearch(vector<int>nums,int target,bool flag)
{
int left=0,right=nums.size()-1,ans=nums.size();
while(left<=right)
{
int mid=(left+right)/2;
if(nums[mid]>target||(flag&&nums[mid]>=target))
{
right=mid-1;
ans=mid;
}
else
{
left=mid+1;
}
}
return ans;
}
int search(vector<int>& nums, int target) {
int left=binarysearch(nums,target,true);
int right=binarysearch(nums,target,false)-1;
if(left<=right&&right<nums.size()&&nums[left]==target&&nums[right]==target)
return right-left+1;
return 0;
}
};