题目描述
统计一个数字在排序数组中出现的次数。
示例 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) {
int low=0, high= nums.length-1;
//二分法确定右边界
while(low <= high){
int mid = (low+high) / 2;
//等于target的时候也要右移,不断逼近右边界
if(nums[mid] <= target){ //注意这个地方的符号和运算
low = mid + 1;
}else{
high = mid - 1;
}
}
int right = low; //右边界
//二分法确定左边界
low=0; high= nums.length-1;
while(low <= high){
int mid = (low + high) / 2;
//等于target的时候也要左移,不断逼近左边界
if(nums[mid] >= target){
high = mid - 1;
}else{
low = mid + 1;
}
}
int left = high; //左边界
return right-left-1;
}
}