题目:
统计一个数字在排序数组中出现的次数。例如输入排序数组{1, 2, 3, 3, 3, 3, 4, 5}
和数字3
,由于3在这个数组中出现了4次,因此输出4
。
解析:
两种解法:
方法一:哈希表。
方法二:二分查找。
参考答案:
class Solution{
//方法一:哈希表
int search(vector<int> &nums, int target){
if(nums.empty())
return 0;
unordered_map<int, int> arr;
for(int i = 0; i < nums.size(); ++i){
arr[nums[i]]++;
}
return arr[target];
}
//方法二:二分查找
int search(vector<int> &nums, int target){
if(nums.empty())
return 0;
int L = 0, R = nums.size() - 1, it = -1;
while(L <= R){
int M = L + (R - L) / 2;
if(nums[M] > target){
R = M - 1;
}else if(nums[M] == target){
it = M;
break;
}else{
L = M + 1;
}
}
if(it == -1) return 0;
int first = it;
int end = it;
while(first >= 0 && nums[first] == target)
first--;
while(end < nums.size() && nums[end] == target)
end++;
return end - first - 1;
}
};