搜索插入位置js实现,LeetCode35
目录
搜索插入位置(js实现,LeetCode:35)
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为
O(log n)
的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
为 无重复元素 的 升序 排列数组-104 <= target <= 104
思路:如果题目没有限制时间复杂度的话,那么用for循环可以很简单的实现,由于该题目需要的时间复杂度为
O(log n)
所以这里使用二分查找,二分查找分别有递归和迭代两种方式,这里使用迭代来实现
二分查找的核心变量有三个:left指针、right指针和mid(middle)指针,每次将target与数组中间项(Arr[mid])作比较,target大于Arr[mid],将left指针右移至mid位置,重新计算mid指针位置target小于Arr[mid],将right指针左移至mid位置,重新计算mid指针位置
mid=Math.floor(left+(right-left)/2)
下面附上实现代码
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function (nums, target) {
let left = 0
let right = nums.length - 1
while (left <= right) {
let mid = Math.floor(left + (right - left) / 2);
if (target == nums[mid]) {
return mid
}
else if (target < nums[mid]) {
right = mid - 1
} else {
left = mid + 1
}
}
return right + 1
};