题目 LC704
左闭右闭 写法
public static int search(int[] nums, int target) {
// 初始化左右指针
int left = 0;
int right = nums.length - 1;
// 当左指针不超过右指针时,继续搜索
while (left <= right) {
// 计算中间位置
int mid = (left + right) / 2;
// 如果中间位置的值等于目标值,返回该位置
if (nums[mid] == target) {
return mid;
// 如果中间位置的值小于目标值,将左指针移动到中间位置的右边
} else if (nums[mid] < target) {
left = mid + 1;
// 如果中间位置的值大于目标值,将右指针移动到中间位置的左边
} else {
right = mid - 1;
}
}
// 如果未找到目标值,返回 -1
return -1;
}
左闭右开 写法
public static int search(int[] nums, int target) {
// 初始化左右指针
int left = 0;
int right = nums.length - 1;
// 当左指针不超过右指针时,继续搜索
while (left < right) {
// 计算中间位置
int mid = (left + right) / 2; //此处不同
// 如果中间位置的值等于目标值,返回该位置
if (nums[mid] == target) {
return mid;
// 如果中间位置的值小于目标值,将左指针移动到中间位置的右边
} else if (nums[mid] < target) {
left = mid +1; //此处不同
// 如果中间位置的值大于目标值,将右指针移动到中间位置的左边
} else {
right = mid ;
}
}
// 如果未找到目标值,返回 -1
return -1;
}
int mid = (left + right) / 2 与 left + (right - left) / 2 后者更好