题目
统计一个数字在排序数组中出现的次数。
示例 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
思路
因为是有序数组,先用二分查找查找到某一个target的下标,然后左右扫描统计target的个数
运行结果
并不理想
代码
class Solution {
public int search(int[] nums, int target) {
if(nums == null || nums.length == 0) return 0;
int low = 0;
int high = nums.length-1;
int mid;
int index = -1;
int num = 0;
while(low<=high) {
mid = (low+high)/2;
if(nums[mid] == target) {
index = mid;
break;
}else if(nums[mid] > target) {
high = mid-1;
}else {
low = mid+1;
}
}
if(index == -1) {
return 0;
}else {
for(int i = index;i>=0;i--) {
if(nums[i] == target) num ++;
}
for(int i = index+1;i<nums.length;i++) {
if(nums[i] == target) num ++;
}
}
return num;
}
}