题目详情:
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
解题思路:
在每次循环中,我们计算中间位置的下标 mid,并将中间元素与目标值进行比较。如果它们相等,则找到了目标值,返回中间下标。
如果中间元素小于目标值,则说明目标值应该在右半部分,我们更新左指针 left 为 mid + 1,缩小搜索范围。
如果中间元素大于目标值,则说明目标值应该在左半部分,我们更新右指针 right 为 mid - 1,缩小搜索范围。
重复上述步骤,直到找到目标值或搜索范围为空(即 left > right),此时返回 -1 表示没有找到目标值。
代码实现:
function search(nums, target) {
let left = 0;
let right = nums.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (nums[mid] === target) {
return mid; // 找到目标值,返回下标
} else if (nums[mid] < target) {
left = mid + 1; // 目标值在右半部分,缩小搜索范围
} else {
right = mid - 1; // 目标值在左半部分,缩小搜索范围
}
}
return -1; // 没有找到目标值,返回 -1
}
// 示例输入
const nums = [-1, 0, 3, 5, 9, 12];
const target = 9;
// 调用函数并输出结果
console.log(search(nums, target));