题目详情
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
题目分解/做题思路
1、二分查找要求传入的数组必须是有序的。
2、先计算中间值,如果中间值比目标值小,说明目标值在右边,此时,左边界+1
3、如果中间值比目标值大,说明目标值在左边,此时右边界-1
4、直到目标值 = 中间值,此时找到,返回下标
解题方法
解题步骤
public static void main(String[] args) {
int[] nums = {-1,0,3,5,9,12};
int target = 9;
System.out.println(search(nums, target));
}
public static int search(int[] nums ,int target){
int left = 0;//左边界
int right = nums.length - 1;//右边界
while (left <= right){
int mid = left + (right - left)/2;//计算中间索引。(right - left)/2 只是在这个区间中间的位置,还需要加上左边界,才知道mid的索引下标
if(nums[mid] == target){
return mid;
}else if (nums[mid] < target){
left = mid + 1; //目标元素在mid右边
}else {
right = mid -1;//目标元素在mid左边
}
}
return -1;
}
相关标签:二分查找