题目
步骤
- 初始化指针:定义
left
和right
两个指针,分别指向数组的起始位置和末尾位置,确定查找范围。- 进入循环:只要
left
小于等于right
,就继续执行循环,因为此时查找范围不为空。- 计算中间索引:通过公式
left + Math.floor((right - left) / 2)
计算中间位置mid
,以找到当前查找范围的中间元素。- 比较与调整:将中间元素
nums[mid]
与目标值target
进行比较。如果nums[mid]
大于target
,说明目标值在中间元素的左侧,将right
指针更新为mid - 1
,缩小查找范围到左半部分;如果nums[mid]
小于target
,说明目标值在中间元素的右侧,将left
指针更新为mid + 1
,缩小查找范围到右半部分;如果nums[mid]
等于target
,则表示找到了目标值,直接返回mid
。- 查找失败处理:当循环结束时,如果仍未找到目标值,说明目标值不在数组中,返回
-1
。
示例代码
var search = function (nums, target) {var left = 0, right = nums.length - 1;while (left <= right) {var mid = left + Math.floor((right - left) / 2);if (nums[mid] > target) {right = mid - 1;} else if (nums[mid] < target) {left = mid + 1;} else {return mid;}}return -1;
};
欢迎指正!