题目描述
统计一个数字在排序数组中出现的次数。
示例 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 count = 0;
for (int num : nums) {
if (num == target) {
count++;
}
}
return count;
}
}
二分
这道题很明显肯定最优解法是二分思想,在这里我巧妙的借助了递归+二分来解决
class Solution {
private int sum = 0;
private int t;
public int search(int[] nums, int target) {
if(nums.length == 0) return 0;
t = target;
int head = 0, tail = nums.length-1;
dfs(head, tail, nums);
if(nums[tail] == t) sum++;
return sum;
}
public void dfs(int head, int tail, int[] nums){
if(head == tail) return;
int mid = (head+tail)/2;
if(nums[mid] == t) sum++;
if(t <= nums[mid]) dfs(head, mid, nums);
if(t >= nums[mid]) dfs(mid+1, tail, nums);
return;
}
}