题目描述

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

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

示例 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

解题思路

这道题最直接的思路就是直接遍历数组,锁定目标值的位置。该方法的时间复杂度为O(n)。

我们还可以使用二分查找。二分法的时间复杂度为O(logn)。

代码实现

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

二分法:

/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function(nums, target) {
let left = 0, right = nums.length - 1
while(left <= right){
const mid = (left + right) >> 1 // >>1用于获取两个数的平均值,向下取整
if(nums[mid] === target){
return mid
}else if(nums[mid] > target){
right = mid - 1
}else{
left = mid + 1
}
}
return left
};

提交结果

二分法:

【LeetCode 35】 搜索插入位置_leetcode