哈希表第5/9题--两数之和

题目描述

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

思路分析

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

针对本题,我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,这就需要使用key value的结构。key来存放元素,value用来存放下标, 使用字典正合适。

判断元素是否出现,这个元素就要作为key,key对应的value用来存下标。

接下来来看使用字典进行编写的代码,首先定义一个字典records,然后使用enumerate函数来遍历获取列表的下标和值;然后判断target与当前值的差是否在records里面,如果不在则在records字典中添加这条记录:{元素:下标};循环遍历列表nums,每次检查target-value的差值是否在records里面有对应的key,如果有则以列表的形式返回这个对应的key的下标和当前的下标。

使用集合来做这道题也比较简单,原理是一样的,首先定义一个集合,然后同样使用enumerate来遍历nums得到下标和值,每次获取target和num的差值,然后查看这个差值是否在定义的集合中,如果不在就添加num,如果在就返回对应的这个差值的索引和当前遍历值的索引。

代码分析

# 解法一,使用字典
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:records = dict()for index, value in enumerate(nums):# 遍历当前元素,并在map中寻找是否有匹配的keyif target - value in records:return [records[target-value], index]# 如果没找到匹配对,就把访问过的元素和下标加入到map中records[value] = indexreturn []# 解法二,使用集合
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:#创建一个集合来存储我们目前看到的数字seen = set()             for i, num in enumerate(nums):complement = target - numif complement in seen:return [nums.index(complement), i]seen.add(num)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/836196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实操专区-第11周-课堂练习专区-图的标记线和标记点

下载安装ECharts&#xff0c;完成如下样式图形。 代码和截图上传 完成 3.1.3.5 图的标记线和标记点 中的任务点 在一些折线图或柱状图当中&#xff0c;可以经常看到图中对最高值和最低值进行了标记。 在ECharts中&#xff0c;标记点&#xff08;markPoint&#xff09;常用于表示…

自定义实现 Java17+SpringBoot3+OpenAPI+Knife4j Starter

文章目录 前言正文1 创建starter项目1.1 依赖文件1.2 配置信息 2 自定义starer代码开发2.1 配置字段的定义2.2 自动配置类 3 验证starter3.1 测试项目的配置3.2 功能配置 application.yml3.3 测试代码3.3.1 实体类3.3.2 控制器13.3.2 控制器2 4 效果展示4.1 主页4.2 实体类列表…

构造二叉树

推断二叉树 P1827 [USACO3.4] 美国血统 American Heritage - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 先序遍历 : 根 左 右 中序遍历 : 左 根 右 后序遍历 : 左 右 跟 由前序遍历和中序遍历推后序遍历 // 由中序遍历和先序遍历 --> 后序遍历 void dfs(string InOr…

数据结构之----线性表顺序表

线性表分为 顺序存储结构 和 链式存储结构 线性表的顺序存储结构&#xff1a; 线性表的顺序存储结构&#xff0c;指的是用一段地址连续的存储单元依次存储线性表的数据元素。 1&#xff0c;顺序表的结构&#xff1a; #define MAXSIZE 20 typedef int El…

计算机组成与结构 计算机基本原理 软设刷题

计算机组成与结构 1-9 1-9 1 在&#xff08;&#xff09;校验方法中&#xff0c;采用模二运算来构造校验位。 A 水平奇偶 B 垂直奇偶 C 海明码 D 循环冗余 Cache与主存之间的映射由硬件实现&#xff0c;主存与辅存之间的交互是硬件与软件结合起来实现的。 D 2 采用n位补码&…

JS中手写函数实现数据的深度拷贝以及异常的抓取

1、手写深度拷贝函数 function deepCopy(data:any) {if (typeof data ! object || data null) {return data; // 非对象直接返回};let copied Array.isArray(data) ? [] : {};for (let key in data) {if (data.hasOwnProperty(key)) {//ts-ignorecopied[key] deepCopy(da…

Windows快速部署DCNv4(成功版)

文章目录 一、介绍二、编译DCNv42.1 下载源码2.2 编译DCNv4 三、报错提示3.1 Cuda is not available3.2 需要Microsoft Visual C 14.0 一、介绍 论文链接&#xff1a;[https://arxiv.org/pdf/2401.06197.pdf] (https://arxiv.org/pdf/2401.06197.pdf)   在这篇文章中介绍了一…

MySQL Undo Log、Redo Log、bin Log

Undo Log 回滚日志&#xff0c;用于将数据回滚到之前的状态。 MySQL在进行数据的增、删、改时&#xff0c;会将数据写入到Undo Log日志中。 对于Undo Log存在着insert和update两种类型的数据。插入语句对应的是insert类型&#xff0c;修改、删除语句对应的是update类型。 U…

【嵌入式开发 Linux 常用命令系列 7.6 -- sed 替换指定字符串】

请阅读【嵌入式开发学习必备专栏】 文章目录 sed 替换指定字符串 sed 替换指定字符串 背景&#xff1a; 找到当前目录下所有的.h 和 .c 文件 将他们中的字符 print_log替换为 demo_log 可以使用find命令结合sed命令在Linux环境下完成这项任务。下面是一个命令行示例&#xff…

【Android】Kotlin学习之Kotlin方法的声明和传参

方法声明 普通类的方法 静态类的方法 不需要构建实例对象, 可以通过类名直接访问静态方法 : NumUtil.double(1) companion object 伴生类的方法 使用companion object 在普通类里定义静态方法 参数 括号内传入方法 : 当参数是方法时, 并且是最后一个参数 , 可以使用括号外…

Linux -- > vim

vi和vim是什么 vi和vim是两款流行的文本编辑器&#xff0c;广泛用于Unix和类Unix系统中。它们以其强大的功能和灵活的编辑能力而闻名&#xff0c;特别是在编程和系统管理中非常受欢迎。 vi&#xff08;Visual Interface&#xff09; vi是最初的文本编辑器之一&#xff0c;由…

React 之 lazy(延迟加载)(十七)

lazy 能够让你在组件第一次被渲染之前延迟加载组件的代码。 在组件外部调用 lazy&#xff0c;以声明一个懒加载的 React 组件: import { lazy } from react;const MarkdownPreview lazy(() > import(./MarkdownPreview.js)); 配合 Suspense 实现懒加载组件 //App.js imp…

外观模式详解

外观模式 1 概述 有些人可能炒过股票&#xff0c;但其实大部分人都不太懂&#xff0c;这种没有足够了解证券知识的情况下做股票是很容易亏钱的&#xff0c;刚开始炒股肯定都会想&#xff0c;如果有个懂行的帮帮手就好&#xff0c;其实基金就是个好帮手&#xff0c;支付宝里就…

课时122:awk实践_进阶知识_赋值运算

1.2.1 赋值运算 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 简介 awk本质上属于一种编程语言&#xff0c;所以它具有编程语言的一般功能&#xff0c;表达式、流程控制等基本上都在awk中具有想当程度的使用。这一节我们学习awk进…

【智能算法】最优捕食算法(OFA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2017年&#xff0c;GY Zhu受到动物行为生态学理论启发&#xff0c;提出了最优捕食算法&#xff08;Optimal Foraging Algorithm, OFA&#xff09;。 2.算法原理 2.1算法思想 OFA灵感来源…

【C++风云录】跨越语音壁垒:口语识别与方言分析

解码语音&#xff1a;语音识别新篇章 前言 本文将探讨C在口语识别与方言分析中的应用&#xff0c;简述其重要性和挑战&#xff0c;并详细介绍Kaldi, ProsodyLab-Aligner, PocketSphinx, HTK (HMM Toolkit), 和 OpenFst等语音识别和处理工具包和库的特点、主要功能以及实际应用…

常用的命令技巧总结

java命令执行 如下编码网站&#xff1a; Runtime.exec Payload Generater | AresXs Blogjava.lang.Runtime.exec() Payload Workarounds - Jackson_Thttps://www.bugku.net/runtime-exec-payloads/ 手动编码操作 bash -c {echo,cGluZyAxMjcuMC4wLjE7ZWNobyAxID50ZXN0LnR4dA}|…

Lab4: traps

RISC-V assembly Which registers contain arguments to functions? For example, which register holds 13 in mains call to printf? 根据RISC-V函数调用规范&#xff0c;函数的前8个参数使用a0-a7寄存器传递。 当main函数调用printf函数时&#xff0c;a2寄存器保存13 …

MVCC 详解

介绍 MVCC&#xff0c;全称 Multi-Version Concurrency Control&#xff0c;即多版本并发控制 MVCC的目的主要是为了提高数据库并发性能&#xff0c;用更好的方式去处理读-写冲突&#xff0c;做到即使有读写冲突时&#xff0c;也能做到不加锁。 这里的多版本指的是数据库中同时…

Springboot+Vue项目-基于Java+MySQL的毕业就业信息管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…