1. 两数之和

哈希应用之两数之和 阅读详情

题目

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

方法一 – 暴力求解

两层for循环

方法二 – 两遍哈希表

步骤:
  1. 遍历数组,将数据中的元素放入到哈希表中
  2. 遍历数组,从哈希表中寻找是否有相加和为target的数据
注意点:

第二次遍历数组的时候,第一次遇到相加和为target的数据的时候,就应该退出循环,如果不退出,将会有两个结果,比如第一次匹配到了1,2,那么还会匹配一次2,1

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

方法三 – 一遍哈希表

思路

方法二中需要先把数据全部放入到哈希表中,然后查找
方法三是让数据的时候一边放一边查找,即使从先查的nums中找不到后面的数据,但是后面的数据在查找的时候,前面的数据已经放在了哈希表中了

代码
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> arr;

        unordered_map<int,int> nums_map;
        for (int i = 0; i < nums.size(); ++i) {
            if (nums_map.find(target - nums[i]) != nums_map.end()) {
                arr.push_back(i);
                arr.push_back(nums_map.find(target - nums[i])->second);
            } else {
                nums_map.insert(pair<int,int>(nums[i],i));
            }
        }
        return arr;
    }
};
1 两数之和 文章摘要 本文介绍了LeetCode经典题目"两数之和"的两种解法:暴力枚举法和哈希表法。暴力枚举法通过双重循环遍历所有组合寻找和为target的两个数,时间复杂度O(n²)。哈希表法利用字典存储数值和索引,通过一次遍历实现快速查找,时间复杂度O(n)。两种方法都能正确解决问题,但哈希表法效率更高。文中提供了Python实现代码,并包含示例说明。 阅读详情

相关推荐

集成电路设计学习笔记(二)基于IC617反相器设计之原理图绘制

博主的博客网站 欢迎大家访问! ccbirds.cn ccbirds.github.io 本文主要记录在IC617中原理图的绘制和schematic的使用方法。 新建library 要画设计自己的集成电路,需要建一个自己的库,方便对自己设计文件的管理。 打开library manager,file 下NEW下Library 选择库的保存路径,一般默认即可,并在name中填入自己库的名字。...

ccbirds 7373

Leetcode:两数之和

问题描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 例如 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 一、暴力循...

baidu_32109835的博客 137

STM32F4_DHT11数字温湿度传感器

开机的时候先检测是否有DHT11存在,如果没有,则提示错误。DHT11和DS18B20相同,传感器输出的都是未编码的二进制数字。本节我们将利用STM32F4来读取DHT11的温湿度传感器,获取环境的温度和湿度值。因此:温湿度的读取方式就是整数部分的二进制转换成十进制放在整数部分;小数部分的二进制转换成十进制放在小数部分。DHT11和MCU的一次通讯时间最大3ms,主机连续向DHT11采样的间隔建议不小于100ms。DHT11是广州奥松有限公司生产的一款温湿度一体化的数字传感器。数据分小数部分和整数部分。

light_2025的博客 3432

【算法】哈希表 ( 两数之和 )

给定一个未排序的数组 , 找到数组中的两个元素之和 , 等于给定的 target 值 ;

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 4279

STC89C52RC单片机原理图详解

左侧A0和右侧B0为一 一对应的关系,左上角DIR为控制数据方向端口,如果DIR接高电平是将左侧数据A0~A8送到右侧B0~B8,如果DIR接低电平,是将右侧数据B0~B8送到左侧A0~A8,由于在电路板上LE始终与VCC连接,因此这里。74HC595是串行输入,并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于I/O口扩展。由于数码管为共阴极,给数码管下面接口输入阳码时,LED才亮,但是直接将P0~P7的高电平输入到数码管时,

m0_50562428的博客 6万+

详解Σ-Δ型ADC拓扑结构的基本原理

现在,总环路滤波器的H(f)具有更大的滚降,Mod 2型的噪声传递函数具有40 dB/十倍频程的上升速率。同样,当正弦波输入为负满量程时,+1和–1之间的转换会减少,输出以–1为主。噪声传递函数是一个高通滤波器函数,提供噪声整形,在DC附近的较低频率,对量化噪声有很强的抑制。H(f)是环路滤波器的函数,定义噪声和信号的传递函数。Σ-Δ型ADC的噪底由热噪声决定,而不受量化噪声的限制。量化噪声为量化器的输入与输出之差。图5. Mod 1 Σ-Δ环路的线性模型(b),包括方程、滤波器、信号和噪声传递函数图。

qq_43416206的博客 1810

两数之和(LeetCode)——哈希表法(C语言)

上一篇文章留了个引子——用“哈希表”法来解决这个问题。今天,我们来解决一下。为什么用哈希表法?很简单因为它——快!讲解之前我们先来提出几个问题?1)什么是“哈希表”?2)怎么用“哈希表法”来解决这个问题?什么是“哈希表”?(摘自:百度百科)其实 哈希表 就是一种 散列表 ,其英文叫做 “Hash table”,本身就是一种 数据结构 。包含 键值对(key-value),通过一个 key 值来直接访问数据,查找速度快。看完这些仍然一头雾水对吧,下面举个简单的例子,我们应该就会更加理解哈希表。日常生活中都使用

简十三的博客 2624

深入解析经典蓝牙连接:从HCI命令到LMP协议的完整流程

本文深入解析经典蓝牙连接的完整流程,从设备发现、寻呼建立物理链路,到安全配对与加密的每一步。通过对照HCI LOG与AIR LOG,详细拆解了HCI命令与LMP协议报文的对应关系,帮助开发者精准定位连接问题,掌握蓝牙调试的核心方法。

weixin_29260291的博客 450

两数之和——哈希映射求解

两数之和的哈希映射解法、C++

Learner_QUN的博客 211

配置 Druid 数据源及密码加密-SpringBoot 实战基础

在SpringBoot中配置 Druid 数据源及密码加密的方法前文集成 MyBatis Plus,实现了一组增删改查接口。在启动服务时,从控制台中可以看出 Spring Boot 默认使用 Hikari 作为数据库连接池,Hikari性能很优秀。在国内使用较多的连接池还属阿里开源的 Druid,中文发音为德鲁伊。Druid 结合了 C3P0、DBCP 等 DB 池的优点,同时还加入了日志监控,可以很好的监控 DB 池连接和 SQL 的执行情况。...

m0_67698950的博客 954

USB2.0物理层实战:手把手教你用示波器抓取D+/D-信号(附波形分析)

本文是一份针对硬件工程师的USB2.0物理层信号调试实战指南。文章详细讲解了如何使用示波器捕获和分析D+/D-差分信号,从基础设置、核心信号状态解读,到信号完整性分析与常见问题排查,手把手教你定位USB通信故障。内容涵盖USB2.0协议物理层关键概念,并附有基础解码思路,旨在提升工程师的底层调试能力。

s8t9u0v1w的博客 450

【力扣】1、两数之和

系列文章目录 【力扣】1、两数之和 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分

一个卑微的java开发 1549

Python自动化脚本:模拟鼠标键盘保持电脑在线状态

在计算机自动化领域,模拟用户输入是一项基础且实用的技术,其核心原理是通过程序生成鼠标或键盘事件来与操作系统交互。这项技术的价值在于能够自动化重复性操作,提升工作效率,并解决特定场景下的系统交互问题。PyAutoGUI作为Python生态中广泛使用的自动化库,封装了跨平台的底层API调用,为开发者提供了简洁统一的接口来实现输入模拟。在实际工程实践中,这类技术常应用于自动化测试、远程办公辅助、数据抓取等场景,帮助用户保持系统活跃状态,防止因无操作导致的锁屏或休眠中断任务。通过合理配置移动间隔和随机化模式,可以更

weixin_28713299的博客 578

LeetCode1. 两数之和、LeetCode2. 两数相加

本文介绍了两种经典算法问题的解决方案: 两数之和问题: 暴力解法:双重循环遍历数组,时间复杂度O(n²),空间复杂度O(1) 哈希表解法:利用字典存储元素值及其索引,一次遍历完成查找,时间复杂度O(n),空间复杂度O(n) 对比显示哈希表解法在较大数组时效率更优 两数相加问题(链表形式): 算法思路:同时遍历两个链表,逐位相加并处理进位 时间复杂度O(max(m,n)),空间复杂度O(max(m,n)) 包含虚拟头节点处理技巧和进位处理逻辑 提供Python代码实现和示例执行流程图示。

lcreek的博客 898

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Leetcode1-两数之和详解

本文主要讲解了使用暴力法和哈西表法计算Leetcode中两个数之和的题目。

白羊by的博客 1728

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LeetCode 1 两数之和

Java 编译器不管你逻辑上能不能走到这,方法签名的每一条分支都必须有 return。不写直接编译报错。写个{-1, -1}兜底就行,反正题目保证有解。

殇的不悔 352

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode-1 两数之和(Java实现)

LeetCode两数之和 习题分析 看到这一题,我马上就想到了对该数组进行双层循环,以题目上的数组为例: 第一次循环:2 + 7、2 + 11、2 + 15 第二次循环:7 + 11、7 + 15 第三次循环:11 + 15 换成代码为: for (int i = 0; i < nums.length - 1; i++){ for (int j = i +1; j < nums.length; j++){ if (nums[i] + nums[j] == target)

weixin_47219685的博客 512

LeetCode1 两数之和

return 会直接终止整个方法,不是仅仅跳出循环。使用 HashMap,先判断 containsKey,再 get 取值,防止空指针。哈希表适合「找是否存在另一个数」这类题目,把已经遍历过的数据存起来,避免二次循环。

2301_80294691的博客 227

Leetcode1 两数之和 python两种方法实现

刷Leetcode就如同刷象棋路边摊一样,最开始刷的时候,觉得某一个象棋的路数好奇妙,刷着刷着回过头来看时发现那个招数在自己的眼中变得没那么令人惊讶了,变得稀松平常了。对于一个数组[c1,c2,c3,c4,c5], 可以一组一组的判断,即(c1,c2),(c1,c3),(c1,c4),(c1,c5),分析:给定一个目标数值,需要返回和为目标数值的两个数的下标,而且答案只有一个。第一遍遍历的时候,如果当前数为答案中的第二个数,则target-当前数 则一定位于当前数之前的数组成的哈希集合中。

Chenglin(Ben) Yu's Miracle 1130

深入解析 LeetCode 1:两数之和

摘要:"两数之和"是经典的数组遍历算法题,要求在数组中找出和为指定目标值的两个元素下标。本文详细解析了使用ArrayList的暴力解法:通过双重循环遍历所有元素对(j>i避免重复),将找到的下标存入ArrayList后转为数组返回。该解法时间复杂度O(n²),空间复杂度O(1),适合初学者理解基础数组操作和集合类应用。文章包含完整Java代码、复杂度分析、边界案例验证及实际应用场景,为进一步优化为哈希表解法奠定基础。

2503_93734861的博客 911

Leetcode1:两数之和

Leetcode1:两数之和 思路:哈希表存储 class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (int i = 0; i < nums.length; i++) { if (map.containsKey(t

zhanghe_zht的博客 189

LeetCode-1-两数之和

题目要求在数组中找到两个数之和等于目标值,并返回它们的索引。提供了两种解法: 暴力枚举法:通过双重循环检查所有可能的组合,时间复杂度O(n²),空间复杂度O(1)。 哈希表法:利用哈希表存储已遍历元素及其索引,每次检查是否存在互补数,时间复杂度O(n),空间复杂度O(n)。 推荐使用哈希表法,因其效率更高。代码实现包括Python、Java和Rust版本,核心思路是计算当前元素的互补值并在哈希表中查找。

weixin_45980775的博客 932

LeetCode 1.两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。

2301_80211119的博客 459

力扣-1.两数之和

小结:注意不能重复使用,可以一边遍历一边插入。

weixin_46878941的博客 546

力扣-1. 两数之和

力扣-1. 两数之和题目描述示例:Java代码 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + ...

Jack魏 590
上一篇: 括号匹配算法
下一篇: 2. 两数相加
NeilZhy
博客等级 码龄11年 175粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值