感觉这道题题目有点问题,没有说是取出现的第一个还是最后一个,通过测试用例结果来看应该是取第一个出现的值。所以在得到匹配的值mid的时候,还需要做两个判断:
- 如果已经是数组第一个数据,直接返回mid的值
- 如果不是数组第一个数据,那么前面的数如果不等于当前mid的数,返回mid即可
- 上述均不满足的时候,把右边界调整为mid-1
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* @@@@这里的要求应该是求第一个出现的值
* 如果目标值存在返回下标,否则返回 -1
* @param nums int整型一维数组
* @param target int整型
* @return int整型
*/
public int search (int[] nums, int target) {
if(nums.length==0){
return -1;
}
int len = nums.length-1;
if(nums[0]>target || nums[len]<target){
return -1;
}
int p=0,q=len;
while(p<=q){
int mid = p + ((q-p)>> 1);
if(nums[mid]<target){
p = mid + 1;
}else if(nums[mid]>target){
q = mid - 1;
}else{
if(mid == 0 || nums[mid-1]!=target){
return mid;
}else{
q = mid - 1;
}
}
}
return -1;
}
}
京公网安备 11010502036488号