一、题目
统计一个数字在排序数组中出现的次数。
点击查看原题
难度级别: 简单
二、思路
1)二分法
统计数字在排序数组中出现次数,由于数组是从小到大排序好的,该过程分为两步:
第一步找到数字位置,采用二分法查找更快速
第二步,根据找到数字的位置向两边搜索并统计
三、代码
1)二分法
class Solution {
public int search(int[] nums, int target) {
int ans = 0;
int loc = find(nums, target);
int left = loc - 1;
while (left >= 0 && nums[left--] == target) { // 向左搜索
ans++;
}
while (loc < nums.length && nums[loc++] == target) { // 向右搜索
ans++;
}
return ans;
}
private int find(int[] nums, int target) {
int s = 0, e = nums.length;
while (s < e) {
int mid = (s + e) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
s = mid + 1;
} else {
e = mid;
}
}
return s;
}
}
C
为目标数字出现次数,时间复杂度为O(logn+C)
,空间复杂度为O(1)