返回
LeetCode 35. 搜索插入位置 - JavaScript 攻克指南
前端
2024-02-01 05:08:18
前言
欢迎来到LeetCode 35题的JavaScript解题指南!本题旨在考察您对排序数组和二分查找算法的理解。我们将共同探索如何有效地找到目标值在数组中的位置,或确定其应被插入的位置。
题目概述
给定一个已排序的数组nums和一个目标值target,您的任务是找到target在nums中的索引。如果target不存在于nums中,您需要返回它将会被按顺序插入的位置。
例如:
输入:nums = [1,3,5,6], target = 5
输出:2
输入:nums = [1,3,5,6], target = 2
输出:1
输入:nums = [1,3,5,6], target = 7
输出:4
算法分析
本题的经典解法是使用二分查找算法。二分查找是一种高效的搜索算法,它通过不断地将搜索范围减半来快速找到目标值。
二分查找算法的步骤如下:
- 初始化左右指针left和right,分别指向数组nums的第一个元素和最后一个元素。
- 计算中间指针mid,将其设置为(left + right) / 2。
- 比较nums[mid]和target的大小:
- 如果nums[mid] == target,则返回mid。
- 如果nums[mid] > target,则将right更新为mid - 1。
- 如果nums[mid] < target,则将left更新为mid + 1。
- 重复步骤2和步骤3,直到left > right。
- 返回right + 1,表示target应被插入的位置。
JavaScript代码实现
/**
* 给定一个已排序的数组和一个目标值,找到目标值在数组中的索引。
* 如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
*
* @param {number[]} nums 已排序的数组
* @param {number} target 目标值
* @return {number} 目标值在数组中的索引,或其应被插入的位置
*/
const searchInsert = (nums, target) => {
let left = 0;
let right = nums.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (nums[mid] === target) {
return mid;
} else if (nums[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return right + 1;
};
复杂度分析
- 时间复杂度:O(log n),其中n是数组nums的长度。二分查找算法的时间复杂度为O(log n),因为在每次迭代中,搜索范围都会减半。
- 空间复杂度:O(1),因为二分查找算法不需要额外的空间。
结语
LeetCode 35题是一道经典的算法题,考察您对二分查找算法的掌握程度。通过本指南,您已经学会了如何使用JavaScript轻松解决这道题目。希望您在LeetCode的征途中继续取得佳绩!