二分查找
思路
定义左右指针(l,r),计算中间指针(m=(l+r)/2),若目标值大于中间指针所指的值则缩小左边距到中间指针右边(l=m+1),若小于则缩小右边距(r=m-1),若没找到则返回-1
示例
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
1
2
3
2
3
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
1
2
3
2
3
代码
public int search(int[] nums, int target) {
//定义左右指针
int l=0,r=nums.length-1,m;
while(l<=r){
//计算中间指针
m=(r+l)>>>1;//防止整数溢出,优化算法
if(nums[m]==target){
return m;
}else if(target<nums[m]){
r=m-1;
}else{
l=m+1;
}
}
return -1;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
上次更新: 2023/12/29 11:32:56