剑指 Offer 53 - I. 在排序数组中查找数字 I
题目描述:
统计一个数字在排序数组中出现的次数。
思路:
统计次数,也就是说数组中存在着一个区间 [left,right]
,这个区间里的值全都等于 target
所以可以采用 2 分法来求出两个边界,算出长度返回即可。
代码:
class Solution {
public int search(int[] nums, int target) {
if(nums.length==0||nums==null){
return 0;
}
int lens=nums.length;
// 找到 num[i]<=target 的右边边界
int l=0,r=lens-1;
while(l<r){
int mid=l+r+1>>1;
if(nums[mid]<=target){
l=mid;
}else{
r=mid-1;
}
}
//记录右边
int right=l;
if(nums[right]!=target&& right>=0){
return 0;
}
// 找到 num[i]<=target 的右边边界
l=0;
r=lens-1;
while(l<r){
int mid=l+r>>1;
if(nums[mid]>=target){
r=mid;
}else{
l=mid+1;
}
}
int left=l;
return right-left+1;
}
}