题目
统计一个数字在排序数组中出现的次数。
示例:输入: nums = [5,7,7,8,8,10], target = 8 输出: 2
解题思路
使用二分法查找,找到与目标数字相等的值的最左侧位置,然后向后移动,记录目标数字的次数。
代码
public int search(int[] nums, int target) {
if (nums==null||nums.length==0){
return 0;
}
int left = 0;
int right = nums.length-1;
int count = 0;//记录target出现的次数
while (left<right){
int mid=left+((right-left)>>1);//防溢出
if (nums[mid]>=target){
right=mid;
}else if (nums[mid]<target){
left=mid+1;
}
}
while (left<nums.length&&nums[left++]==target){
count++;
}
return count;
}