当前位置: 首页 > 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]] 是之前存储的索引。


http://www.mrgr.cn/news/93268.html

相关文章:

  • Spring(三)容器-注入
  • FreeRTOS列表和列表项
  • 审批流AntV框架蚂蚁数据可视化X6饼图(注释详尽)
  • win11不能访问到共享文件
  • 多线程-线程池
  • AI 实战5 - pytorch框架实现face检测
  • 在S32K3上实现SOC的神经网络算法的可行性
  • io函数 day3 文件io与系统函数
  • 一篇文章讲解清楚ARM9芯片启动流程
  • ​Unity插件-Mirror使用方法(八)组件介绍(​Network Behaviour)
  • K8s 1.27.1 实战系列(一)准备工作
  • FastExcel/EasyExcel简介以及源码解析
  • 尚庭公寓项目记录
  • AD学习-最小系统板,双层
  • Ubuntu 22.04安装NVIDIA A30显卡驱动
  • Dify+DeepSeek | Excel数据一键可视化(创建步骤案例)(echart助手.yml)(文档表格转图表、根据表格绘制图表、Excel绘制图表)
  • VIA的寄生电感和Stub对高速信号的影响
  • 单细胞分析(21)——SCENIC 分析流程(singularity容器版)
  • RT-thread的MultiButton按键库的使用
  • 记录一次Spring事务失效导致的生产问题