返回
强势入场:LeetCode每日刷题之首秀,JS实战两数之和
前端
2023-10-27 23:50:24
作为一名跃跃欲试的算法爱好者,我怀着满腔热情踏上了LeetCode的刷题征途。今日首秀,让我们将目光聚焦于两数之和这一经典问题,以JavaScript为利刃,一探算法世界的神秘。
问题概述
给定一个整数数组nums和一个目标值target,请找出数组中两个数的索引,使得它们的和等于target。你可以假设每个输入只有一个解决方案,并且你不能两次使用同一个元素。
算法实现
/*
* LeetCode题目:两数之和
*
* 给定一个整数数组nums和一个目标值target,请找出数组中两个数的索引,使得它们的和等于target。你可以假设每个输入只有一个解决方案,并且你不能两次使用同一个元素。
*
* 示例:
* 输入:nums = [2, 7, 11, 15], target = 9
* 输出:[0, 1]
* 解释:因为nums[0] + nums[1] == 9,所以返回[0, 1]。
*/
const twoSum = function (nums, target) {
// 构建哈希表存储数字和索引
const map = new Map();
// 遍历数组
for (let i = 0; i < nums.length; i++) {
const complement = target - nums[i];
// 检查哈希表中是否存在目标值的补数
if (map.has(complement)) {
// 返回索引对
return [map.get(complement), i];
}
// 将当前数字和索引添加到哈希表
map.set(nums[i], i);
}
// 如果没有找到目标值,返回空数组
return [];
};
算法分析
为了解决两数之和问题,我们采用了一个巧妙的哈希表方法。哈希表是一种数据结构,可以将键值对快速地存储和检索。在我们的算法中,我们将数字作为键,并将相应的索引作为值存储在哈希表中。
当我们遍历数组时,我们将每个数字的补数(即target减去当前数字)作为键在哈希表中进行查找。如果找到,则说明我们找到了两数之和的解决方案,并返回这两个数字的索引。如果没有找到,则我们将当前数字和索引添加到哈希表中,以便在后续的遍历中进行查找。
这种方法的复杂度为O(n),其中n是数组nums的长度。这是因为我们只遍历数组一次,并且对于每个元素,我们只需要进行一次哈希表查找或插入操作。
结语
通过今天的刷题挑战,我们不仅掌握了JavaScript解决两数之和问题的代码实现,还加深了对哈希表数据结构的理解。相信随着每日一题的坚持,我们的算法能力定会突飞猛进,敲开大厂之门指日可待!