# 【基础篇 - Day 25】 2020-11-25 - 35. 搜索插入位置

# 题目描述

# 入选理由

  1. 熟悉下二分法

# 题目描述

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

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

示例 1:

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

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

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

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/search-insert-position 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

# 我的回答

https://github.com/leetcode-pp/91alg-2/issues/51#issuecomment-732764008

# 解法一

# 时空复杂度

时间复杂度:O(n)

空间复杂度: O(1)

看到简单题,我就不困了

var searchInsert = function (nums, target) {
    for (let i = 0; i < nums.length; i++) {
        if (nums[i] >= target) return i
    }
    return nums.length
};

# 解法二

# 时空复杂度

时间复杂度:O(logn)

空间复杂度: O(1)

顺序数组,就要想要二分法

var searchInsert = function (nums, target) {
    if (target > nums[nums.length - 1]) return nums.length
    if (target <= nums[0]) return 0
    let left = 0
    let right = nums.length
    while (left < right) {
        let mid = Math.floor(left + (right - left) / 2)
        if (nums[mid] === target) return mid
        if (nums[mid] < target) {
            left = mid
        } else {
            right = mid
        }
        if (right - left === 1) return right
    }
    return right
};

写长了 再来

var searchInsert = function (nums, target) {
    let left = 0
    let right = nums.length
    while (left <= right) {
        let mid = Math.floor(left + (right - left) / 2)
        if (nums[mid] === target) return mid
        if (nums[mid] < target) {
            left = mid + 1
        } else {
            right = mid - 1
        }
    }
    return left
};

# 参考回答

Last Updated: 12/22/2022, 9:53:26 AM