35. 搜索插入位置

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

你可以假设数组中无重复元素。

示例 1:

  1. 输入: [1,3,5,6], 5
  2. 输出: 2

示例 2:

输入: [1,3,5,6], 2
输出: 1

示例 3:

输入: [1,3,5,6], 7
输出: 4

示例 4:

输入: [1,3,5,6], 0
输出: 0

思路

  1. 直接遍历
  2. 二分法

代码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function (nums, target) {
    for(let i = 0; i < nums.length; i++) {
      let cur = nums[i];
      if (target <= cur) {
        return i
      }
    }
    return nums.length;
};
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function (nums, target) {
    let len = nums.length;
    let left = 0,
      right = len - 1;
    while (left <= right) {
      let mid = (left + (right - left) / 2) | 0;
      if (target == nums[mid]) {
        return mid;
      } else if (target < nums[mid]) {
        right = mid - 1;
      } else {
        left = mid + 1;
      }
    }
    return left;
  };

复杂度分析

时间复杂度 day27.[双指针].35. 搜索插入位置 - 图1#card=math&code=O%28N%29) day27.[双指针].35. 搜索插入位置 - 图2#card=math&code=O%28logN%29)

空间复杂度 day27.[双指针].35. 搜索插入位置 - 图3#card=math&code=O%281%29) day27.[双指针].35. 搜索插入位置 - 图4#card=math&code=O%281%29)