感觉这道题题目有点问题,没有说是取出现的第一个还是最后一个,通过测试用例结果来看应该是取第一个出现的值。所以在得到匹配的值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; } }