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

LeetCode-001:Python 实现哈希表求两数之和:初识哈希表

一、先说这道题在问什么“两数之和”是 LeetCode 里非常经典的一道入门题。题目大意是给你一个整数数组nums和一个目标值target请你在数组中找到两个数让它们相加等于target并返回这两个数的下标。比如nums [2, 7, 11, 15] target 9因为2 7 9所以答案就是[0, 1]注意这里返回的不是两个数本身而是它们在数组中的位置也就是下标。二、最容易想到的方法暴力枚举如果我们刚学完 Python最先想到的通常是把数组里的每两个数都试一遍看看有没有加起来等于target的。代码可以这样写def twoSum(nums, target): n len(nums) for i in range(n): for j in range(i 1, n): if nums[i] nums[j] target: return [i, j] return []这段代码不难理解外层循环先固定第一个数内层循环再去找第二个数如果两个数相加等于目标值就返回它们的下标举个例子nums [2, 7, 11, 15] target 9程序会这样找2 7 9找到了返回[0, 1]这个方法是对的但有个问题慢。因为它会把很多组合都试一遍。如果数组很长这种做法效率就不高了。三、为什么它慢假设数组里有n个元素。暴力方法中第一个数要遍历很多次对于每个第一个数第二个数也要继续遍历所以总的时间复杂度是O(n²)你可以简单理解为数据一多程序要试很多很多对数字。那有没有一种方法让我们不用每次都重新去数组里找另一个数有这就要用到哈希表。四、什么是哈希表很多初学者一看到“哈希表”这三个字就紧张觉得这一定是很高级的数据结构。其实在 Python 里你早就接触过它了。Python 里的哈希表就是dict比如d {} d[2] 0 d[7] 1这个d本质上就是一个哈希表。它存的是“键 - 值”的对应关系键2对应值0键7对应值1在这道题里我们可以让键数组中的数字值这个数字对应的下标也就是说我们一边遍历数组一边把“某个数出现过而且它在什么位置”记下来。这样以后想找某个数是否出现过就不用重新遍历整个数组了直接去字典里查就行。这就是哈希表的核心作用查找快。五、这道题为什么适合用哈希表题目要我们找两个数x y target如果当前我们正在看一个数x那我们其实只需要知道target - x有没有在前面出现过。例如target 9 当前数 x 7那我们就要找9 - 7 2只要之前见过2就说明答案找到了。所以问题就变成如何快速判断一个数之前有没有出现过这正是哈希表擅长的事。六、核心思路边查边存我们可以一边遍历数组一边做两件事先查target - 当前数在不在哈希表里再存把当前数和它的下标存到哈希表里代码如下def twoSum(nums, target): hashtable {} for i, x in enumerate(nums): if target - x in hashtable: return [hashtable[target - x], i] hashtable[x] i return []这就是这道题最经典的写法。七、先别急这段代码一行一行看1. 创建哈希表hashtable {}这里创建了一个空字典。也可以写成hashtable dict()两种写法都行。这个字典后面会用来记录某个数字出现过没有如果出现过它的下标是多少2. 遍历数组for i, x in enumerate(nums):这句很多人一开始不熟我当时也容易卡住。它的意思是遍历数组nums并且同时拿到下标和元素值。比如nums [2, 7, 11, 15]那么for i, x in enumerate(nums): print(i, x)输出就是0 2 1 7 2 11 3 15也就是说i是下标x是当前元素你可以把它理解成for 下标, 元素 in 枚举(nums):如果你对这个写法还不熟它其实等价于下面这种更“传统”的写法for i in range(len(nums)): x nums[i]只是enumerate(nums)更方便、更常用。3. 先查找配对数if target - x in hashtable:这句非常关键。假设当前的数是x那我们要找的另一个数就是target - x如果这个数已经在哈希表里说明我们之前已经见过它了。那当前这个x和之前那个数正好能凑成target。4. 找到就返回答案return [hashtable[target - x], i]这里返回的是两个下标hashtable[target - x]之前那个配对数的下标i当前数的下标例如当前x 7而target 9那我们找的是2。如果哈希表里有{2: 0}那说明数字2在下标0。当前7在下标1。所以返回[0, 1]5. 没找到就把当前数存进去hashtable[x] i意思是把“当前数字 - 当前下标”这组信息存起来。例如x 2 i 0那就相当于hashtable[2] 0表示数字2出现在下标0。八、为什么一定要“先查再存”这个顺序不能乱。正确写法是if target - x in hashtable: return [hashtable[target - x], i] hashtable[x] i为什么不能先存再查因为题目要求是找两个不同位置的数。如果你先把当前数存进去再去查就可能把自己和自己配对了。举个例子nums [3, 2, 4] target 6当你遍历到第一个3时如果先存哈希表里就有了3再查target - 3 3就会误以为找到了配对但实际上这个3只有一个不能和自己配。所以一定要先看前面有没有我要找的数再把自己存进去这样才能保证匹配到的是之前的元素而不是自己。九、完整模拟一遍执行过程我们用这个例子来走一遍nums [2, 7, 11, 15] target 9初始状态hashtable {}第 1 轮循环当前i 0 x 2先查target - x 9 - 2 7哈希表里有没有7没有因为现在哈希表还是空的。那就把当前数存进去hashtable[2] 0此时哈希表变成{2: 0}第 2 轮循环当前i 1 x 7先查target - x 9 - 7 2哈希表里有没有2有而且它对应的下标是0。说明之前见过数字2现在又遇到了7它们正好相加等于9。于是返回[0, 1]程序结束。十、这段代码到底快在哪暴力方法里我们要反复去数组里找另一个数查找很慢。哈希表方法里我们把已经出现过的数字存在字典里。以后只需要一句if target - x in hashtable:就能快速判断它在不在。因此整个过程只需要遍历一遍数组。时间复杂度O(n)意思是数组有多少个元素就大致操作多少次。空间复杂度O(n)因为我们额外开了一个哈希表最坏情况下可能要把所有元素都存进去。十一、适合初学者记住的模板这题你不用死记整段代码只要记住下面这个模板就行def twoSum(nums, target): d {} for i, x in enumerate(nums): if target - x in d: return [d[target - x], i] d[x] i return []

相关文章:

LeetCode-001:Python 实现哈希表求两数之和:初识哈希表

一、先说这道题在问什么 “两数之和”是 LeetCode 里非常经典的一道入门题。 题目大意是: 给你一个整数数组 nums 和一个目标值 target,请你在数组中找到 两个数,让它们相加等于 target,并返回这两个数的下标。 比如&#xff…...

ai辅助开发新场景:让快马生成基于tailscale exposure的内网设备探测工具

今天想和大家分享一个最近用AI辅助开发的实用小工具——基于Tailscale Exposure的内网设备探测工具。这个项目特别适合需要监控内部网络设备状态的场景,而且整个过程在InsCode(快马)平台上实现起来非常顺畅。 项目背景与需求 作为一个经常需要维护内部网络的人&am…...

5G时代下,MEC如何让无人驾驶不再‘卡顿’?——边缘计算实战解析

5G时代下,MEC如何让无人驾驶不再‘卡顿’?——边缘计算实战解析 当一辆无人驾驶汽车以60公里时速行驶时,每100毫秒的延迟就会导致1.67米的制动距离差异。这正是边缘计算技术(MEC)在智能交通领域大显身手的核心场景——…...

明日方舟基建自动化:从手动操作到智能管理的进阶指南

明日方舟基建自动化:从手动操作到智能管理的进阶指南 【免费下载链接】arknights-mower 《明日方舟》长草助手 项目地址: https://gitcode.com/gh_mirrors/ar/arknights-mower 作为《明日方舟》玩家,你是否也曾面临这样的困境:每天花费…...

JetBrains IDE试用期重置终极指南:如何轻松实现30天无限续杯

JetBrains IDE试用期重置终极指南:如何轻松实现30天无限续杯 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾经在项目冲刺的关键时刻,突然被JetBrains IDE弹出的"试用期已结束…...

温度通信系统 LCD显示+上位机显示 传感器使用的是ds18b20,LCD显示温度,还可以串口...

温度通信系统 LCD显示上位机显示 传感器使用的是ds18b20,LCD显示温度,还可以串口通信在pc上显示温度,并且有VB的上位机实时显示波形,实物验证成功 自己写的代码,注释详细 有代码有仿真 上位机显示这温度监控系统折腾了…...

2025届学术党必备的十大降AI率工具推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 对于知网AI检测系统来讲,要降低生成文本的可识别性,得从词汇层面施展…...

多媒体内容(视频、音频)如何进行seo优化_网站域名和托管对seo优化有什么关系

多媒体内容(视频、音频)如何进行SEO优化 在互联网时代,多媒体内容,尤其是视频和音频,已经成为了吸引和留住用户的重要工具。要让这些内容在搜索引擎上获得更高的曝光率,SEO优化显得尤为关键。本文将详细探讨多媒体内容如何进行SE…...

新手零基础入门:借助快马ai生成你的第一个openclaw浏览器插件

新手零基础入门:借助快马AI生成你的第一个OpenClaw浏览器插件 最近想尝试开发浏览器插件,但看到各种manifest配置、content script、background script这些概念就头大。作为完全的新手,我找到了一个超级友好的工具——InsCode(快马)平台&…...

ESP32开发环境搭建避坑指南:VScode+ESP-IDF 5.0保姆级教程(Windows版)

ESP32开发环境搭建避坑指南:VScodeESP-IDF 5.0保姆级教程(Windows版) 刚接触ESP32开发的Windows用户,往往在环境搭建阶段就会遇到各种"坑"。本文将从实际踩坑经验出发,手把手带你避开那些常见的陷阱&#xf…...

QQ音乐加密音频转换终极指南:qmcdump让你的音乐重获自由

QQ音乐加密音频转换终极指南:qmcdump让你的音乐重获自由 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是…...

SillyTavern:5分钟打造你的专属AI角色对话平台

SillyTavern:5分钟打造你的专属AI角色对话平台 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 想要创建一个完全个性化的AI对话体验吗?SillyTavern正是为追求极致自…...

DeepL免费翻译开源工具使用指南:零成本实现专业级翻译体验

DeepL免费翻译开源工具使用指南:零成本实现专业级翻译体验 【免费下载链接】bob-plugin-akl-deepl-free-translate **DeepL免秘钥,免启服务**,双击使用,免费无限次使用,(**新增DeepL单词查询功能**)根据网页版JavaScript加密算法逆向开发的bobplugin;所以只要官网的…...

如何用Excel实现3D打印GCode的完全控制:FullControl GCode Designer终极指南

如何用Excel实现3D打印GCode的完全控制:FullControl GCode Designer终极指南 【免费下载链接】FullControl-GCode-Designer Software for designing GCODE for 3D printing 项目地址: https://gitcode.com/gh_mirrors/fu/FullControl-GCode-Designer 想要真正…...

决策树:从入门到精通,一个算法搞定分类与回归

还在为选择什么算法发愁?决策树既能分类又能回归,解释性还超强,今天带你彻底搞懂它一、引言如果你正在学习机器学习,那么决策树绝对是你绕不开的一道坎。为什么?因为它太实用了——银行用它来判断是否给用户批贷款&…...

革新Windows Android应用体验:无缝集成与效率提升的完美方案

革新Windows Android应用体验:无缝集成与效率提升的完美方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在数字化工作与生活深度融合的今天&#xff0c…...

4大场景化解决方案:CyberpunkSaveEditor存档修改工具全指南

4大场景化解决方案:CyberpunkSaveEditor存档修改工具全指南 【免费下载链接】CyberpunkSaveEditor A tool to edit Cyberpunk 2077 sav.dat files 项目地址: https://gitcode.com/gh_mirrors/cy/CyberpunkSaveEditor 当你在夜之城遭遇装备属性不足、任务进度…...

OpenGL天空盒实战:从零搭建到环境反射效果(附完整代码)

OpenGL天空盒实战:从零搭建到环境反射效果(附完整代码) 在3D图形开发中,天空盒技术是实现环境氛围营造的基础手段。想象一下,当你站在游戏场景中抬头望去,远处的山脉、流动的云层和深邃的星空共同构成了沉浸…...

告别云端依赖:用Docker-Compose搭建私有化Jitsi-Meet,并打包成离线安装包

私有化视频会议解决方案:基于Docker-Compose的Jitsi-Meet离线部署全指南 想象一下,你正在为一个跨国企业部署内部视频会议系统,但客户要求完全私有化部署,且服务器位于无外网连接的隔离环境。这种场景下,传统的云服务依…...

OpenClaw人人养虾:自动化故障排查

本指南汇总了 OpenClaw 各自动化模块(Cron、Hooks、Webhooks、Polls)的常见故障及排查步骤。遇到自动化任务异常时,请按照以下分类逐步排查。通用诊断命令在深入排查之前,先运行以下命令获取全局状态:# 查看 Gateway 运…...

OpenClaw人人养虾:企业财务自动化

通过 OpenClaw 的 Cron(定时任务) Hooks(钩子)组合,实现发票附件的自动发现、OCR(光学字符识别)信息提取、数据校验和财务系统录入的全自动化流程。每月可为财务人员节省 80% 以上的发票处理时间…...

智能配置引擎:OpenCore EFI构建效率提升90%的技术突破

智能配置引擎:OpenCore EFI构建效率提升90%的技术突破 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 问题溯源:开源系统硬件适…...

如何构建跨平台番剧播放器:基于Flutter的Kazumi深度技术解析

如何构建跨平台番剧播放器:基于Flutter的Kazumi深度技术解析 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕,支持实时超分辨率。 项目地址: https://gitcode.com/gh_mirrors/ka/Kazumi …...

磁力搜索终极指南:如何用magnetW一站式聚合23个资源站点

磁力搜索终极指南:如何用magnetW一站式聚合23个资源站点 【免费下载链接】magnetW [已失效,不再维护] 项目地址: https://gitcode.com/gh_mirrors/ma/magnetW 还在为寻找影视、软件、学习资料而苦恼吗?磁力搜索工具magnetW为你提供了一…...

新手福音:告别环境配置噩梦,在快马平台直接体验jdk1.8编程

作为一个Java新手,最让人头疼的往往不是写代码本身,而是配置开发环境。记得我第一次尝试安装JDK时,光是找对版本就花了半小时,环境变量配置更是让我抓狂。直到发现了InsCode(快马)平台,才发现原来入门Java可以这么简单…...

Vite Plus 迁移记录与踩坑总结

2. 为什么决定迁移到 ViteVite 刚刚发布,MIT 协议,免费且开源。我十分喜欢 Vite 的 API 的设计和兼容性,对于 Tona, Vite 几乎每个版本都有经历,从 Vite 0.8 版本开始使用, 逐步过渡到 Vite 8,每…...

基于模糊控制的改进DWA算法功能详解

改进动态窗口DWA算法,模糊控制自适应调整评价因子权重,matlab代码 这段代码是一个基于动态窗口法(Dynamic Window Approach,DWA)的路径规划算法的实现。下面我将对代码进行分析,并解释算法的优势、需要注意…...

相机预览流程:从Surface到屏幕的每一帧

引言:预览,不只是"看个大概" 打开相机App的瞬间,你看到的那一帧实时画面,背后经历了什么? 很多开发者以为相机预览就是"把摄像头的数据显示出来"——听起来简单,做起来却暗藏玄机。一个60fps的流畅预览背后,涉及HAL层数据采集、BufferQueue生产者…...

Radiology子刊(IF=6.3)复旦大学附属金山医院强金伟教授等团队:基于多参数MRI的深度学习和影像组学评估早期宫颈癌淋巴结转移

01文献学习今天分享的文献是由复旦大学附属金山医院强金伟教授等团队于2026年4月3日在《Radiology: Imaging Cancer》(中科院2区,IF6.3)上发表的研究“Multiparametric MRI-based Deep Learning and Radiomics for Evaluating Lymph Node Met…...

利用快马平台AI能力,十分钟快速原型一个tokenp钱包基础框架

今天想和大家分享一个快速验证区块链钱包原型的经验。最近在研究以太坊生态,发现用InsCode(快马)平台可以十分钟就搭出tokenp钱包的基础框架,特别适合做技术验证。 为什么需要快速原型 做区块链产品最怕的就是花几周开发完才发现技术路线有问题。tokenp这…...