返回

强势入场:LeetCode每日刷题之首秀,JS实战两数之和

前端

作为一名跃跃欲试的算法爱好者,我怀着满腔热情踏上了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解决两数之和问题的代码实现,还加深了对哈希表数据结构的理解。相信随着每日一题的坚持,我们的算法能力定会突飞猛进,敲开大厂之门指日可待!