力扣两数之和js解答

这个问题是经典的两数之和问题,可以通过使用哈希表(JavaScript 中的 Map 或者对象)来解决。下面是一个 JavaScript 的解决方案:

function twoSum(nums, target) {
    const numMap = new Map(); // 创建一个 Map 来存储数字及其索引
    for (let i = 0; i < nums.length; i++) {
        const complement = target - nums[i]; // 计算差值
        if (numMap.has(complement)) { // 如果 map 中存在差值对应的键
            return [numMap.get(complement), i]; // 返回两个索引
        }
        numMap.set(nums[i], i); // 存储当前数字及其索引到 map 中
    }
    return []; // 如果没有找到匹配的项,返回空数组
}

// 示例
const nums = [2, 7, 11, 15];
const target = 9;
console.log(twoSum(nums, target)); // 输出 [0, 1],因为 nums[0] + nums[1] == 9

这段代码的工作原理如下:

  1. 遍历数组 nums
  2. 对于每个元素 nums[i],计算 target - nums[i],这就是我们需要找的补数。
  3. 检查 complement 是否已经在 numMap 中。如果是,则说明我们已经找到了解,直接返回这两个索引。
  4. 如果 complement 不在 numMap 中,就将当前元素 nums[i] 和它的索引 i 加入到 numMap 中,以便后续查找。
  5. 如果遍历结束都没有找到解,返回空数组。

这种方法的时间复杂度为 O(n),空间复杂度也为 O(n),其中 n 是数组 nums 的长度。这是因为最坏的情况下,我们需要遍历整个数组,并且可能需要在哈希表中存储所有元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值