注意:在有序数组中的查找采用二分法,要敏感
方法一:遍历数组,统计target出现的次数
class Solution {
public:
int search(vector<int>& nums, int target) {
int size = nums.size();
int res = 0;
for(int i = 0; i < size; i++)
{
if(nums[i]==target)
{
res++;
}
}
return res;
}
};
方法二:利用二分法
统计target出现的次数,找到target -1 的位置和target+1 的位置,然后位置相减即得到target出现的次数
class Solution {
public:
int search(vector<int>& nums, int target) {
int size = nums.size();
int i = 0, j = size - 1;
//找右边界
while(i <= j)
{
int med = (i + j)/2;
if(nums[med] <= target) i = med + 1;
else j = med - 1;
}
int right = i;
//找左边界
if(j>=0&& nums[j]!= target) return 0; // 若数组中无 target ,则提前返回
i = 0, j = size - 1;
while(i <= j)
{
int med = (i+j)/2;
if(nums[med]>= target) j = med -1;
else i = med + 1;
}
int left = j;
return right - left - 1;
}
};