当前位置: 首页 > news >正文

JavaScript实现著名的“两数之和”问题

在这里插入图片描述
下面是使用 JavaScript 实现“两数之和”问题的一种常见解法,利用哈希表(Map)存储遍历过的数字和它们对应的下标,从而在一次遍历中完成查找。以下是详细的代码和说明:

function twoSum(nums, target) {
    // 创建一个 Map 用于存放数字及其下标
    const map = new Map();
    
    // 遍历数组
    for (let i = 0; i < nums.length; i++) {
        // 计算当前数字所需要的补数
        const complement = target - nums[i];
        
        // 如果 Map 中存在这个补数,说明找到了答案
        if (map.has(complement)) {
            return [map.get(complement), i];
        }
        // 将当前数字及其下标存入 Map 中
        map.set(nums[i], i);
    }
    
    // 根据题目的假设,每种输入一定有唯一答案
    return [];
}

// 举例说明
const nums = [2, 7, 11, 15];
const target = 9;
const result = twoSum(nums, target);
console.log("下标结果为:", result);  // 输出: 下标结果为: [0, 1]

代码解析

  1. 初始化 Map:使用 Map 存储数组中已遍历的数字和它们对应的下标。
  2. 遍历数组:对每个元素 nums[i]
    • 计算补数 complement = target - nums[i]
    • 检查 complement 是否已存在于 Map 中。如果存在,则返回 [map.get(complement), i],即补数的下标和当前数字的下标。
    • 如果不存在,则将当前数字和下标存入 Map 中,供后续查找使用。
  3. 返回结果:因为题目保证存在唯一解,所以在找到答案后直接返回。

复杂度分析

  • 时间复杂度:O(n)。只需对数组进行一次遍历。
  • 空间复杂度:O(n)。Map 最多存储 n 个元素。

这种方法充分利用了哈希表的快速查找特性,能够在一次遍历中高效地找到目标答案。

相关文章:

  • C# Enumerable类 之 数据(类型)转换
  • Linux之kernel(1)系统基础理论(5)
  • 详细探索如何用脚本实现M小ySQL一键安装与配置,提升运维效率!
  • # 【Unity】【游戏开发】赛车游戏中碰撞加速的实现方法
  • LeetCode 692. 前K个高频单词:多种解法与实现技巧
  • YOLO11改进-模块-引入多尺度小波池化变压器MWPT 通过结合小波变换、多尺度池化以及门控机制等技术解决多尺度、小目标、边缘模糊等问题
  • 【GNN】第二章:图数据
  • 【电路笔记 TMS320C6***DSP】外部存储器接口 A EMIFA向FPGA(作为异步存储器)写入数据的示例
  • Python学习(十四)pandas库入门手册
  • 自学Java-JavaSE基础加强(File、IO流)
  • 市场趋势解析与交易策略优化
  • C# Unity 面向对象补全计划 之 [反射]自动处理带有自定义[特性]的类
  • 对celery的,路径,任务路径问题。
  • QDBus:Qt对DBus的封装支持
  • Springboot集成dubbo完整过程(三)
  • gitbash忽略未追踪文件的解决方式
  • 四阶龙格-库塔(Runge-Kutta)算法详解
  • STM32Cubemx配置E22-xxxT22D lora模块实现定点传输
  • 数据库事务的 ACID,通过MVCC能做什么
  • qt将文件压缩成zip包
  • 济南网站建设公司制作/免费发广告的网站
  • 漳州 外贸网站建设 SEO/百度关键词广告怎么收费
  • 素材设计做的好的网站有哪些/免费b站软件推广网站2023
  • 长沙公司网站设计/友情链接怎么购买
  • 建设网站的个人心得体会/奇零seo赚钱培训
  • 阿里巴巴怎么做自己的免费网站/淘宝指数查询入口