题目链接
题目描述
统计一个数字在排序数组中出现的次数。
示例
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
解题思路
二分查找
bin_search(int A[],int n,int key){
int low,high,mid;
low = 0;
high = n-1;
while(low<=high)
{
mid =(low + high)/2;
if(A[mid]==key)return mid;
if(A[mid]<key){
low =mid + 1;
}
if(A[mid]>key){
high= mid - 1;
}
}
return -1;
}
class Solution {
public:
int search(vector<int>& nums, int target) {
if(nums.empty())
return 0;
int len = nums.size()-1;
if(nums[0]>target||nums[len]<target)
return 0;
return firstIndex(nums,target+1,len) - firstIndex(nums,target,len);
}
int firstIndex(vector<int>& nums, int target, int len){
int left = 0,right = len;
while(left<=right){
int mid = left + (right-left)/2;
if(nums[mid] >= target){
right = right - 1;
}else{
left = mid + 1;
}
}
return left;
}
};
- 时间复杂度:O(logN)
- 空间复杂度:**O(1)**