题目
统计一个数字在排序数组中出现的次数。
思路
一开始我想的是,直接for循环遍历,后面觉得,这题肯定不简单。于是我就去看了一下大佬们都是怎么写的。
大佬们的思路就是用了二分搜索算法,求出右边界,然后一剪即可,可以说非常惊艳了。
代码
class Solution {
public int bound(int[] nums,int t){
int mid=0,left=0,right=nums.length-1;
while(left<=right){
mid=(left+right)/2;
if(nums[mid]<=t) left=mid+1;
else right=mid-1;
}
return left;
}
public int search(int[] nums, int target) {
return bound(nums,target)-bound(nums,target-1);
}
}