剑指 Offer 53 - I. 在排序数组中查找数字 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
解题思路:
先使用二分查找,找到其中一个,然后再从low到high进行遍历统计
class Solution {
public:
int search(vector<int>& nums, int target) {
int low = 0;
int high = nums.size() - 1;
int mid = (low + high) / 2;
while(low < high){
if(nums[mid] < target){
low = mid + 1;
mid = (low+high)/2;
}
else if(nums[mid] > target){
high = mid;
mid = (low + high) / 2;
}
else{
break;
}
}
int count = 0;
for(int i = low; i <= high; i++){
if(nums[i] == target){
count++;
}
}
return count;
}
};
暴力算法:
class Solution {
public:
int search(vector<int>& nums, int target) {
int count = 0;
for(int i = 0; i < nums.size(); i++){
if(nums[i] == target){
count++;
}
}
return count;
}
};