【JS】哈希法解决两数之和

思路

  • 使用哈希法:需要快速查询一个元素是否出现过,或者一个元素是否在集合里时

本题需要一个集合来存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,符合要求的某元素是否遍历过,也就是 是否出现在这个集合。

  • 因为要返回下标,所以使用Map集合,key存放元素值,value存放元素下标

步骤

  1. 创建哈希表:初始化一个空的 Map,用于存储数组中每个元素的值及其对应的索引。

  2. 遍历数组:使用一个 for 循环逐个检查数组 nums 中的每个元素。

  3. 计算补数:对于当前元素,计算 target 与它的差值,称为补数。

  4. 查找补数:检查 Map 中是否已经包含了这个补数。

  5. 找到匹配:如果找到了补数,说明之前已经遍历过一个元素与当前元素相加可以得到 target,返回这两个元素的索引。

  6. 存储元素索引:如果当前元素的补数不在 Map 中,将当前元素和它的索引存入 Map

  7. 结束条件:如果遍历完整个数组都没有找到匹配的两个数,返回一个空数组。

题目

示例代码

var twoSum = function(nums, target) {
    // 创建一个 Map 对象来存储已经遍历过的数字及其索引
    let map = new Map();

    // 遍历数组的每个元素
    for (let i = 0; i < nums.length; i++) {
        // 计算当前元素与目标值的差值
        let complement = target - nums[i];

        // 检查 map 中是否已经存在与当前元素的差值相等的元素
        if (map.has(complement)) {
            // 如果存在,返回一个数组,包含 map 中存储的索引和当前元素的索引
            // map.get(complement) 是找到的与当前元素和为目标值的另一个元素的索引
            // i 是当前元素的索引
            return [map.get(complement), i];
        }

        // 将当前元素及其索引存入 map 中
        // 这样下次遍历时可以直接查找与之配对的元素
        map.set(nums[i], i);
    }

    // 如果遍历完数组都没有找到符合条件的两个数,返回空数组
    return [];
};

欢迎指正! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/888728.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鹧鸪云光伏软件全面解析

一、主要功能 光伏电站常用工具&#xff1a; 投融资估算&#xff1a;帮助用户进行光伏电站项目的投资预算和融资规划。 发电量计算&#xff1a;根据光伏电站的设计参数和当地气候条件&#xff0c;计算电站的发电量。 安装倾角测算&#xff1a;根据屋顶朝向和地理位置&#…

刷题 二叉树

二叉树的核心思想 - 递归 - 将问题分解为子问题 题型 递归遍历迭代遍历层序遍历 bfs&#xff1a;队列各种递归题目&#xff1a;将问题分解为子问题二叉搜索树 - 中序遍历是递增序列 TreeNode* &prev 指针树形dp 面试经典 150 题 - 二叉树 104. 二叉树的最大深度 广度优…

边缘人工智能(Edge Intelligence)

边缘人工智能&#xff08;Edge AI&#xff09;是指在边缘设备上直接运行人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;算法的技术。机器学习是一个广泛的领域&#xff0c;近年来取得了巨大的进步。它所基于的原则是&#xff0c;计算机可以通过从数据…

gaussdb hccdp认证模拟题(判断)

1.在事务ACID特性中&#xff0c;原子性指的是事务必须始终保持系统处于一致的状态。(1 分) 错。 2.某IT公司在开发软件时&#xff0c;需要使用GaussDB数据库&#xff0c;因此需要实现软件和数据的链接&#xff0c;而DBeaver是一个通用的数据库管理工具和 SQL 客户端&#xff…

T536 工业级设备处理器:为智能硬件与工业应用打造的高性能解决方案

T536 工业级设备处理器&#xff1a;为智能硬件与工业应用打造的高性能解决方案 引言 在当今快速发展的科技时代&#xff0c;工业自动化和智能硬件领域对处理器的需求日益增长。为了满足这一需求&#xff0c;Allwinner Technology推出了T536系列处理器&#xff0c;这是一款专为…

大数据行业应用实训室建设方案

摘要&#xff1a; 本文旨在探讨唯众针对当前大数据行业的人才需求&#xff0c;提出的《大数据行业应用实训室建设方案》。该方案旨在构建一个集理论教学、实践操作、技术创新与行业应用于一体的综合实训平台&#xff0c;以培养具备实战能力的大数据专业人才。 一、大数据课程体…

无人机之飞行算法篇

无人机的飞行算法是一个复杂而精细的系统&#xff0c;它涵盖了多个关键技术和算法&#xff0c;以确保无人机能够稳定、准确地执行飞行任务。 一、位置估计 无人机在空中飞行过程中需要实时获取其位置信息&#xff0c;以便进行路径规划和控制。这通常通过以下传感器实现&#…

MFC多媒体定时器实例(源码下载)

用MFC多媒体定时器做一个每1秒钟加一次的计时器&#xff0c;点开始计时按钮开始计时&#xff0c;点关闭计时按钮关闭计时。 1、在库文件Med_timeDlg.h文件中添加代码 class CMed_timeDlg : public CDialog { // Construction public:CMed_timeDlg(CWnd* pParent NULL); // st…

No.14 笔记 | XSS漏洞:原理、类型与防御策略

一、HTML和JavaScript基础 1. HTML基础 HTML概述&#xff1a;超文本标记语言&#xff0c;用于实现页面跳转和显示数据。结构标准&#xff1a;包括<!doctype html>声明文档类型&#xff0c;<html>根标签&#xff0c;<head>头部标签和<body>主体标签等。…

Docsify搭建个人博客

前提&#xff1a;电脑安装了Node.js 安装到本地 CMD命令下输入node -v查看是否已经安装了Node.js 安装docsify-cli工具&#xff1a;npm i docsify-cli -g 使用git下载docsify-Plus项目&#xff0c;Gitee地址&#xff1a;https://gitee.com/librarycodes/docsify-plus cd…

Linux安装RabbitMQ安装

1. RabbitMQ介绍 1.1 RabbitMQ关键特性 异步消息传递&#xff1a;允许应用程序在不直接进行网络调用的情况下交换消息。 可靠性&#xff1a;支持消息持久化&#xff0c;确保消息不会在系统故障时丢失。 灵活的路由&#xff1a;支持多种路由选项&#xff0c;包括直接、主题、…

建筑物能耗模拟软件EnergyPlus下载安装及使用

建筑物能耗模拟软件EnergyPlus下载安装及使用 EnergyPlus概述EnergyPlus下载及安装EnergyPlus安装 EnergyPlus使用参考 建筑物能耗模拟软件是一种在建筑设计阶段使用的工具&#xff0c;能够透过电脑模拟预测未来建筑物的能耗情况&#xff0c;达成建筑性能模拟。这有助于评估不同…

C# HttpClient请求URL重定向后丢失Authorization认证头信息 .Net Core Web Api

问题: 使用.Net 入库Doris请求FE端口后,FE响应重定向到其他BE节点出现的认证失败问题。 搜查官方文档后发现&#xff1a; HttpWebRequest.AllowAutoRedirect Property (System.Net) | Microsoft Learn 微软提供的http类库HttpClient &#xff08;HttpWebRequest\WebClient已不…

python的内存管理机制

python的内存管理机制主要分为三个部分&#xff1a;引用计数、垃圾回收和内存池机制。 引用计数机制&#xff1a; python通过维护每个对象的引用计数来跟踪内存中的对象。当对象被创建时就会有一个引用计数&#xff0c;当对象不再被使用时&#xff0c;引用计数为0&#xff0c…

5.错误处理在存储过程中的重要性(5/10)

错误处理在存储过程中的重要性 引言 在数据库编程中&#xff0c;存储过程是一种重要的组件&#xff0c;它允许用户将一系列SQL语句封装成一个单元&#xff0c;以便重用和简化数据库操作。然而&#xff0c;像任何编程任务一样&#xff0c;存储过程中的代码可能会遇到错误或异常…

攻防世界---->[简单] 初识RSA

做题笔记。 下载 是一个.py的文件。 用 Notepad打开瞅瞅。 分析&#xff1a; L (p-1)*(q-1) dgmpy2.invert(e,L) 求逆元快速算出来&#xff1a;invert(e,φ(N)) 求出d值。 n p*q pq p*(q-1) qp q*(p-1) L 【q*(p-1) * p*(q-1)】 // p*q >>> (p-1)*(…

通信工程学习:什么是OSPF开放式最短路径优先

OSPF&#xff1a;开放式最短路径优先 OSPF&#xff08;Open Shortest Path First&#xff0c;开放式最短路径优先&#xff09;是一种内部网关协议&#xff08;IGP&#xff09;&#xff0c;被广泛应用于计算机网络中&#xff0c;特别是在构建大型和复杂的网络时。以下是对OSPF的…

Pikachu-url重定向-不安全的url跳转

不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能发生"跳错对象"的问题。 url跳转比较直接的危害是: …

Dev-C++ 安装与使用(dev c++官网)(已解决)

1.Dev-C的安装 ①打开Dev-C的官网(https://sourceforge.net/projects/orwelldevcpp/ )&#xff1b;点击Download(下载)&#xff0c;等待5秒后开始下载。 ②点开下载好的EXE文件&#xff0c;等待加载完成(如图)。 右键&#xff0c;以管理员身份 运行安装包。 选择English(英语),…

JVS·智能BI数据可视化图表:普通列表与分组列表配置全解析

使用场景 在可视化配置中&#xff0c;很多场景中需要图形和详细信息的融合展示&#xff0c;那么在图表中可以新增普通列表与分组列表的配置。如下图所示&#xff1a; 配置说明 1、新增组件&#xff1a;配置入口如下图所示&#xff0c;新增组件时&#xff0c;选择普通列表与分…