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

哈希表解Two Sum问题

Two Sum问题:给定一个整数数组 nums 和一个目标值 target,要求返回和为 target 的两个数的下标。

直接枚举的时间复杂度较高,主要由于每次查找 target - x 都需要线性扫描数组,导致整体复杂度达到 O(N²)。使用哈希表可以将查找操作的时间复杂度降为 O(1),从而将整体复杂度优化至 O(N)。

问题

给定一个整数数组 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]

解法

建立一个哈希表,用于存储数组元素及其索引。遍历数组时,检查哈希表中是否存在 target - current_value 的键。若存在,直接返回当前索引和哈希表中存储的索引。若不存在,将当前元素及其索引存入哈希表。

from typing import Listclass Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hashtable = dict()                       # 哈希表:数值 → 下标for i, num in enumerate(nums):if target - num in hashtable:        # 发现配对成功return [hashtable[target - num], i]hashtable[num] = i                   # 保存当前数值的下标return []                                # 无解(LeetCode 保证有解,可省略)
作用
hashtable = dict()建一个空字典,用来记录“已经扫描过的数值”及其“第一次出现的下标”。
for i, num in enumerate(nums):一次遍历,同时拿到下标 i 和元素值 num
if target - num in hashtable:计算“另一半”target - num,如果它已经在字典里,说明之前某个位置 j 满足 nums[j] + nums[i] == target
return [hashtable[target - num], i]直接返回这对下标:先存进来的那个(j)和当前这个(i)。
hashtable[num] = i如果还没找到配对,就把当前数值和下标存进字典,供后面查找。
return []如果遍历结束都没找到,返回空列表(LeetCode 官方数据保证有解,这句其实跑不到)。

这种方法避免了双重循环,显著提升了效率。哈希表的快速查找特性确保了每次查询操作仅需常数时间,同时只需遍历数组一次即可完成。

算法复杂度

  • 时间:O(n) —— 只扫一次数组,字典查询/插入平均 O(1)。
  • 空间:O(n) —— 最坏情况下字典要存 n-1 个元素。\

例子

nums = [2, 7, 11, 15], target = 9
i=0, num=2  -> 另一半 7 不在字典 -> 存入 {2:0}
i=1, num=7  -> 另一半 2 在字典   -> 返回 [0, 1]
http://www.dtcms.com/a/400914.html

相关文章:

  • 做资源分享网站怎么样网站源码采集
  • 网站建设后台管理登陆代码北京海淀区官网
  • 广州技术支持:奇亿网站建设论坛式网站建设
  • 计算学习理论第一课:PAC学习模型——我们如何定义“学习”?
  • 设计导航精选最好的设计网站大全渭南建设网站
  • 邯郸网站建设哪家好免费网站的软件
  • 给企业做网站运营权大师的网站是哪个公司做的
  • 【Java】Map和Set
  • 中国建设银行绑定网站网络改造实施方案
  • 做网站要钱吗搭建平台舞台
  • 海东地网站建设wordpress免费相册插件
  • 搭建公司网站教程南京制作网页培训班
  • 北京赛车网站开发网站建设柚子网络科技官网
  • 做的网站图片模糊帮忙推广的平台
  • 做网站交互demo工具濮阳房产网官网
  • 做淘宝货源网站没有网站可以做seo
  • 用服务器做网站空间再高权重网站加自己的链接会容易被收录吗
  • 网站推广平台有哪些wordpress 获取page
  • 网站开发工程师岗位描述老专家个人网站
  • 微信网站开发登录兰州网络推广技术
  • 源代码代做网站wordpress不同分类不同模板 插件
  • 上海做电缆桥架的公司网站joomla 做的网站
  • 东营网站建设推广足彩网站建设
  • 网站建设价值188旅游网站管理系统6.0模板
  • 从城内快递到国际物流:深入浅出BGP协议基本原理
  • 乌镇网站开发文档建设工程职称 在哪个网站
  • 榆林网站建设网站开发的对联
  • wordpress全站注明wordpress 主题添加小工具
  • 做网站做国外广告网站维护 一年
  • 06627网页制作与网站建设北京十大装饰装修公司