/** * 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target, * 如果目标值存在返回下标,否则返回 -1。 * 输入: nums = [-1,0,3,5,9,12], target = 9 * 输出: 4 * 解释: 9 出现在 nums 中并且下标为 4 * 输入: nums = [-1,0,3,5,9,12], target = 2 * 输出: -1 * 解释: 2 不存在 nums 中因此返回 -1 */ public int getTarget(int[] arr,int target){ int left = 0; int right = arr.length - 1; while (left <= right){ int middle = (left + right) /2; if(target < arr[middle]){ right = middle - 1; }else if(target > arr[middle]){ left = middle + 1; }else { return middle; } } return -1; } @Test public void test1(){ int[] nums = new int[]{-1,0,3,5,9,12}; // int target = getTarget(nums, 9); int target = getTarget(nums, 2); System.out.println(target); }
while里面left<=right因为等于时也不会越界
target < arr[middle]时说明target元素的索引肯定不是middle所以right取middle前一个索引
标签:arr,middle,target,nums,int,二分法,索引,查找,left From: https://www.cnblogs.com/sgj191024/p/17536863.html