首页 > 其他分享 >【JS】哈希法解决两数之和

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

时间:2024-10-09 22:48:15浏览次数:3  
标签:map 遍历 数组 Map 元素 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 [];
};

欢迎指正! 

标签:map,遍历,数组,Map,元素,JS,索引,哈希,两数
From: https://blog.csdn.net/m0_74662483/article/details/142725146

相关文章

  • js学习 -2024/10/9
    今天学习了js中的一些知识DOM通过document.get...函数获取元素对象可以查阅h3school资料找对象的函数,操作对象,//根据id获取元素对象//letid=document.getElementById('back');//id.src="../img/02.png";//根据标签获取元素对象vardivss=document.getElement......
  • codeforces round 974(div.3)E(优先队列实现dijstra算法,devc++的优先队列用greater报
    解题历程:看到两边同时移动,计算最终的相遇时间,我就想到两边同时计算各点到起点的最短距离,就是使用dijstra算法,最后所有节点取两次计算的最大值,再对所有节点取最小值,就是最终答案了,可是这个思路没有考虑有马的情况,思考一番后发现可以多列一个数组记录有马的情况下的行走最短路,然后......
  • JS刷力扣-链表【持续跟新】
    力扣的链表归类2.两数相加【链表+递归】前置知识:1.链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。2.链表的入口节点称为链表的头结点也就是head。leet......
  • 【模板】树哈希
    https://peehs-moorhsum.blog.uoj.ac/blog/7891题目描述对一棵树求hash值,以判断两棵树是否同构。有有根树和无根树两个版本。solution找一个随机函数\(f\)(可以选xor-shift),然后每个点的子树的哈希值如下计算:\[h_u=1+\sum_{v}f(h_v)\]这是有根树的情况,对于无根树,1.可以换......
  • Vue.js点餐页面完整教程:从零开始实现功能齐全的点餐系统” “轻松上手!用Vue.js打造响
    效果图:目录一、创建Vue项目二、构建基本页面结构三、使用CSS美化页面四、实现页面交互功能五、完整代码展示六、结语步骤点餐页面是餐饮类应用的重要组成部分。它不仅要美观,还需要具备良好的交互体验。今天,我们将使用Vue.js和CSS从零开始制作一个响应式点餐页面,......
  • nodeJS构建错误——digital envelope routines::unsupported
    最近正在调研开源工作流项目,从github上克隆的代码,执行npmrundev报错。错误如下:查找原因出现了问题,自然要想办法解决。在网上搜索了一圈,发现该问题早已出现,一般描述的大致原因就是:当 nodejs 升级到17+版本以后,开始支持 OpenSSL3.0,而 OpenSSL3.0 对各种摘要算法做......
  • 洛谷 P7469 [NOI Online 2021 提高组] 积木小赛(字符串哈希)
    题目传送门解题思路读题后,我们可以发现,字母串  只能从两边删除,于是我们可以枚举一个区间 ,然后在字母串  中匹配(可以用指针来进行匹配),同时可以做字符串哈希去重。注意如果怕被卡,可以用双模哈希;记得开longlong代码#include<bits/stdc++.h>usingnamespacestd;......
  • 基于nodejs+vue移动购物管家app[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着移动互联网技术的迅猛发展,智能手机已成为人们日常生活中不可或缺的一部分。在这一背景下,移动购物逐渐取代了传统购物方式,成为现代消费的主流模式。消费......
  • 基于nodejs+vue移动互联时代的设备管理系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,各类智能设备在日常生产和生活中的应用日益广泛。从智能手机到可穿戴设备,从工业控制设备到智能家居系统,这些设备极大地提升了......
  • 基于nodejs+vue颐心家政服务网站[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着现代生活节奏的加快,越来越多的家庭面临着时间管理和家务分配的挑战。传统的家政服务虽然在一定程度上缓解了这一压力,但信息不对称、服务质量参差不齐、......