统计一个数字在排序数组中出现的次数。
示例 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答:
1)直接遍历
class Solution {
public:
int search(vector<int>& nums, int target) {
int sum;
for(int i=0;i<nums.size();i++){
if(nums[i]==target){
sum++;
}
}
return sum;
}
};在这里插入代码片
2)二分查找
找出左右边界
class Solution {
public:
int search(vector<int>& nums, int target) {
int i=0, j=nums.size()-1;
while(i<=j){
int m=(j+i)/2;
if(nums[m]<=target){
i = m+1;
}
else{
j=m-1;
}
}
int right = i;
if(j>=0&&nums[j]!=target) return 0;
i=0;j=nums.size()-1;
while(i<=j){
int m=(j+i)/2;
if(nums[m]<target){
i = m+1;
}
else{
j=m-1;
}
}
int left = j;
return right-left-1;
}
};