统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
首先看到题目,排序数组,有序首先想到的应该是二分查找
class Solution {
public int search(int[] nums, int target) {
return helper(nums,target)-helper(nums,target-1);
}
private int helper(int[] nums,int tar){
int left=0;
int right=nums.length-1;
while(left<=right){
int mid=(left+right)/2;
if(nums[mid]<=tar){
left=mid+1;
}else{
right=mid-1;
}
}
return left;
}
}
二分查找不用多说了,值得说的仍然是用二分查找来处理这个问题的思路,如果mid索引处的值小于或等于target,左指针left加加,最后循环走完的情况就是left索引的位置是比所要找的target大的第一个位置,传进去的参数一个是本数组一个是索引,就比如示例1来说 执行主函数后两个调用的函数返回的left索引分别是
相减返回的是2