剑指 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
核心:二分法找到目标数字,并以找到数字下标往左右查找相同数字并计数
class Solution {
public int search(int[] nums, int target) {
int low=0,high=nums.length-1;
int count=0;
//需要判断low==high的情况
while(low<=high){
int mid=low+(high-low>>1);
//二分法划分,mid+1为右,mid-1为左
if(nums[mid]>target){
high=mid-1;
}else if(nums[mid]<target){
low=mid+1;
}else if(nums[mid]==target){
int i=mid,j=mid+1;
//找到目标数字并将以目标下标往左右查找计数,往左以i为下标,往右以j为下标
while(i>=0&&nums[i--]==target){
count++;
}
while(j<=nums.length-1&&nums[j++]==target){
count++;
}
break;
}
}
return count;
}
}