-
给定一个排序的数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在数组中,返回它将会被按顺序插入的位置。
- 你可以假设数组中无重复元素 示例1:
输入: [1, 3, 5, 6], 5 输出: 2示例2:
输入: [1, 3, 5, 6], 2 输出: 1解题1
// 数组是排好序的,我们希望找到第一个大于等于target的元素,它的位置就是target的元素,它的位置就是target希望插入的位置。 // 如果数组元素比target小,则target应该插在数组的末尾 const searchInsert = function (nums, target) { for (let i = 0; i < nums.length; i++) { if (target <= nums[i]) { return i; } } return nums.length; } console.log(searchInsert([1, 2, 3, 5], 3));解法2
// 解法2 二分查找 const searchInsert = (nums, target) => { let lo = 0; let hi = nums.length - 1; // while 循环会一直循环代码块,只要指定的条件为 true。 /*while (条件) { 要执行的代码块 }*/ while (lo <= hi) { const mid = (lo + hi) >>> 1 if (nums[mid] === target) { return mid; } else if (nums[mid] > target) { hi = mid - 1; } else { lo = mid + 1; } } return lo; // 退出循环时候 hi比lo小1; }