题目
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
leetcode704
易错点
边界条件的选择:这里使用的思想是左闭右闭的原则
1、对于左右边界应该是小于还是小于等于?
这里使用l <= r
2、对于左右边界变化时,使用等于mid还是mid的左右
这里使用
l = mid + 1; // 这里使用+1
r = mid - 1; // 这里使用-1
如图所示:左闭右闭实现
Java实现
class Solution {
public int search(int[] nums, int target) {
int l = 0;
int r= nums.length - 1;
int mid = 0;
while (l <= r) { // 这里需要使用<=
mid = l + (r - l) / 2; // 求中间值,同时防止溢出
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
l = mid + 1; // 这里使用+1
} else {
r = mid - 1; // 这里使用-1
}
}
return -1;
}
}