每日一道算法题 35. 搜索插入位置

142 阅读1分钟
  • 给定一个排序的数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在数组中,返回它将会被按顺序插入的位置。

    • 你可以假设数组中无重复元素 示例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;
    }