题目描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
代码: // 1. 给出的数组和目标值如示例1 let Nums = [-1, 0, 3, 5, 9, 12], Target = 9; // 2. 函数封装 var search = function (nums, target) { // 3. 定义查找范围[left,right] 初始化left = 0,right = 数组的长度-1 let left = 0, right = nums.length - 1; while (left <= right) { // 4. 获取每次查找范围的中点mid const mid = Math.floor((right - left) / 2) + left; const num = nums[mid]; // 5. 比较num 和 target 的大小 if (num === target) { // 5.1 如果 nums[i] = target, 则下标i即为要寻找的下标; return mid; } else if (num > target) { // 5.2 如果 nums[i] > target, 则 target 只可能在下标i的左侧; right = mid - 1; } else { // 5.3 如果 nums[i] < target, 则 target 只可能在下标i的右侧; left = mid + 1; } } // 6. 如果target不在数组中,则当left > right 时结束查找,返回-1 return -1; } console.log(search(Nums,Target));