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

leetcode1 两数之和 哈希表

什么时候使用哈希法,当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。

242. 有效的字母异位词 (opens new window)这道题目是用数组作为哈希表来解决哈希问题,349. 两个数组的交集 (opens new window)这道题目是通过set作为哈希表来解决哈希问题。

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

枚举 nums 中的 x,再找数组中是否存在 target -x。在一堆数中找一个数用哈希。

两数之和的求解可以分为以下 3 步:

  1. 创建一个哈希表。key 存储 nums[i],value 存储 i

  2. 遍历 nums 数组,对于当前元素 nums[i],查询哈希表中是否存在 target - nums[i]。

  3. 若存在,返回下标,如不存在,nums[i] 存入哈希表,继续第 2 步。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> hash;
        vector<int> out;
        for(int i = 0; i < nums.size(); i++){
            if(hash.find(target - nums[i]) != hash.end()){
                out.push_back(i);
                out.push_back(hash[target - nums[i]]);
                break;
            }
            hash[nums[i]] = i;
            
        }
        return out;
    }
};

一开始的错误:

对于当前元素 nums[i],我们需要检查的是 target - nums[i] 是否在哈希表中。

在将结果存入 out 时,你错误地使用了 hash[nums[i]] 而不是 i。具体来说,out.push_back(hash[nums[i]]) 应该是 out.push_back(i),因为 i 是当前数字的索引,而 hash[nums[i]] 是之前存储的索引。

相关文章:

  • 极狐GitLab 17.9 正式发布,40+ DevSecOps 重点功能解读【四】
  • Golang的多团队协作开发
  • 设计模式|策略模式 Strategy Pattern 详解
  • BambuStudio学习笔记:FlushVolCalculator类
  • doris: Oracle
  • ROM修改进阶教程------修改安卓机型SELinux宽容的几种方式方法 以及第三方系统中如何关闭SELinux宽容
  • 【AD】5-2 DXF结构导入与板框自定义
  • skynet简单游戏服务器的迭代
  • Spring AI 接入 DeepSeek AI
  • 【linux 安装mongodb】在redhat9上安装mongodb8出现下载元数据错误
  • LLM 模型 Prompt 工程
  • rabbitmq-amqp事务消息+消费失败重试机制+prefetch限流
  • Ubuntu 22.04安装NVIDIA A30显卡驱动
  • 机器学习-决策树详细解释
  • 决策树(Decision Tree)基础知识
  • Java TCP 通信:实现简单的 Echo 服务器与客户端
  • Scala:统计每个单词出现的个数并打印
  • SolidWorks 转 PDF3D 技术详解
  • [vue] .native修饰符
  • 【Proteus仿真】【STM32单片机】全自动养护智能生态雨林缸
  • 孙卫东会见巴基斯坦驻华大使:支持巴印两国实现全面持久停火
  • 学习教育期间违规吃喝,李献林、叶金广等人被通报
  • 联合国秘书长欢迎中美经贸高层会谈成果
  • 香港根据《维护国家安全条例》订立附属法例
  • 马上评丨75万采购300元设备,仅仅终止采购还不够
  • 水豚“豆包”出逃已40天,扬州茱萸湾景区追加悬赏