二分法查找目标元素在数组中的索引
/**
* 给定一个 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前一个索引
浙公网安备 33010602011771号