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

【算法 - 哈希表】两数之和

这里写自定义目录标题

  • 两数之和
  • 题目解析
  • 思路
    • 解法一 :暴力枚举 依次遍历
    • 解法二 :使用哈希表来做优化
  • 核心逻辑
    • 为什么之前的暴力枚举策略不太好用了?
    • 所以,这就是 这道题选择 ==固定一个数,再与其前面的数逐一对比完后,再将其自身放入hash表中,参与匹配== 的原因
  • 代码实现



两数之和

题目解析

在这里插入图片描述



思路

解法一 :暴力枚举 依次遍历

  • 时间复杂度 O(n^2)
    暴力枚举两层for()循环遍历O(n^2)
  • 空间复杂度 无
  1. 先固定其中一个数
  2. 依次与该数之前的数相加

而 解法二 则是,遍历完这个数以后,将其丢入hash表中。枚举下一个数时,很自然的枚举hash表中前面遍历过的数

解法二 :使用哈希表来做优化

  • 时间复杂度:O(n)
    由原来的 暴力枚举两层for()循环遍历O(n^2) 到 ,只需遍历一遍 固定一个数O(n)哈希表查找匹配的另一个数O(1)

  • 空间复杂度:O(n)
    对比 暴力枚举 即可看出,哈希表是用 空间换时间



核心逻辑

为什么之前的暴力枚举策略不太好用了?

我们也能把所有的数都放入hash表中,再由前往后遍历一遍数组,再直接在hash中找匹配的数就好了,为什么还要 逐一遍历,再将遍历到的节点逐一放入hash表中

这是因为会出现 恰好 遍历到的数本身,也能满足匹配的要求 的情况,这违反了题目所说的需求 数组中同一个元素在答案里不能重复出现
在这里插入图片描述
blog.csdnimg.cn/direct/4e384c8f2ebd454f910606e12c610d2c.jpeg)

因此,这种做法需要加入特判


所以,这就是 这道题选择 固定一个数,再与其前面的数逐一对比完后,再将其自身放入hash表中,参与匹配 的原因

因此,循环遍历固定一个节点遍历完后将该节点放入hash表中,后继续向后遍历,仅需查找前面放入hash表中的值即可(就不会出现查找hash表中选中自身的情况,这样的顺序避免了 出现了重复出现同一个数字 的情况 。不需要再处理什么边界情况 了。



代码实现

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {                                   //  数  ,下标unordered_map<int,int> hash;    // <nums[i],i>   // 遍历数组for(int i=0;i<nums.size();i++){int x=target-nums[i];if(hash.count(x)) return {hash[x],i};  // hash[x]中 存放的就是 x的下标hash[nums[i]]=i;     // 遍历完后,将该节点放入到hash表中}// 照顾编译器return {1,-1};}
};

在这里插入图片描述

http://www.lryc.cn/news/391982.html

相关文章:

  • 【深度学习】图形模型基础(5):线性回归模型第一部分:认识线性回归模型
  • 2024 年第十四届 APMCM 亚太地区大学生数学建模竞赛B题超详细解题思路+数据预处理问题一代码分享
  • Yarn有哪些功能特点
  • 深度学习算法bert
  • PyTorch - 神经网络基础
  • docker-compose搭建minio对象存储服务器
  • vue3使用pinia中的actions,需要调用接口的话
  • Python酷库之旅-第三方库Pandas(003)
  • 社交电商中的裂变营销利器,二级分销模式,美妆家具成功案例分享
  • 【国产开源可视化引擎Meta2d.js】图层
  • 基于Redisson实现分布式锁
  • Android Studio下载Gradle特别慢,甚至超时,失败。。。解决方法
  • leetcode--二叉树中的最长交错路径
  • c++ primer plus 第15章友,异常和其他:15.1.3 其他友元关系
  • uniapp+vue3页面跳转和传参
  • 硬链接和软链接
  • 属性描述符初探——Vue实现数据劫持的基础
  • 字节也没余粮了?天底下没有永远免费的GPT-4;AI产品用订阅制就不合理!让用户掏钱的N种定价技巧嘿嘿 | ShowMeAI日报
  • 【Matlab 路径优化】基于蚁群算法的XX市旅游景点线路优化系统
  • 我关于Excel使用点滴的笔记
  • 【Java安装】windows10+JDK21+IDEA
  • 《简历宝典》01 - 一文带你学会如何写一份糟糕透顶的简历
  • 多链路聚合通信路由在应急救援活动中的重要性及解决方案
  • PyCharm中如何将某个文件设置为默认运行文件
  • 【杂交版】植物大战僵尸杂交版v2.1最新版本下载链接
  • 图像增强及运算篇之图像掩膜直方图和HS直方图
  • Python商务数据分析知识专栏(六)——Python数据分析的应用④Python数据分析实训
  • 【Python机器学习】处理文本数据——将文本数据表示为词袋
  • 论文写作全攻略:Kimi辅助下的高效学术写作技巧
  • 通证经济重塑经济格局