如题
就没必要分析了,最直观的就是遍历计数呗
public static int search(int[] nums, int target) {
int count=0;
for(int num :nums) {
if(num==target) {
count++;
}
}
return count;
}
但是很显然,不是最优结果,分析题意,是有序数组,那就有更优化的找对应值的方法了
public static int search1(int[] nums, int target) {
int left =0;
int right = nums.length-1;
while(left<=right) {//二分查找
int middle = (right+left)/2;
if(nums[middle]<target) {
left=middle+1;//注意 不加1无法处理right=left+1 target不存在
}
if(nums[middle]>target) {
right=middle-1;
}
if(nums[middle]==target) {
int count =1;
for(int id=middle-1;id>=left;id--) { //向两边计数
if(nums[id]==target) {
count++;
}else {
break;
}
}
for(int id=middle+1;id<=right;id++) {
if(nums[id]==target) {
count++;
}else {
break;
}
}
return count;
}
}
return 0;
}
很显然会有提升