很简单的题,我直接给代码,代码里面有注释
class Solution {
/*
先写一个查找target的方法,找到下标,然后左右蔓延,如果没有找到直接返回-1
*/
public int search(int[] nums, int target) {
int index = searchOneNum(nums,target);
if(index==-1){
return 0;
}
int sum = 1;
int left = index-1;
while(left>=0&&nums[left]==target){
left--;
sum++;
}
int right = index+1;
while(right<nums.length&&nums[right]==target){
right++;
sum++;
}
return sum;
}
//折半查找找到第一个target返回其下标,没找到返回-1
public int searchOneNum(int[] nums,int target){
//i表示左边,j表示右边
for(int i=0,j=nums.length-1;i<=j;){
int mid = (i+j)/2;
if(nums[mid]<target){
i=mid+1;
}else if(nums[mid]>target){
j=mid-1;
}else{
return mid;
}
}
return -1;
}
}