# 【基础篇 - Day 25】 2020-11-25 - 35. 搜索插入位置
# 题目描述
# 入选理由
- 熟悉下二分法
# 题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
};