题目
题目链接
统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
限制:
0 <= 数组长度 <= 50000
解题思路
二分查找缩减范围
利用二分的思想,排除数组中左侧不包含给定数字的部分,再另一部分中遍历查找输出出现次数
代码
class Solution {
public int search(int[] nums, int target) {
if(nums.length==0){
return 0;
}
int sum = 0;
int left = 0;
int right = nums.length - 1;
while (left != right) {
int mid = left + (right - left) / 2;
//排除左部分不包含给定数字的无用部分
if (nums[mid] >= target) {
right = mid;
} else if (nums[mid] < target) {
left = mid + 1;
}
}
//查找出现次数 排除了没有给定数字的左部分
while (left < nums.length && nums[left++] == target) {
sum++;
}
return sum;
}
}