哈希优化策略

news/2025/10/28 16:32:31/文章来源:https://www.cnblogs.com/Glory1020/p/19172160

哈希优化策略

算法题中,我们常通过将线性查找替换为哈希查找来降低算法的时间复杂度。我们借助一个算法题来加深理解。

Q:给定一个整数数组 nums 和一个目标元素 target ,请在数组中搜索“和”为 target 的两个元素,并返回它们的数组索引。返回任意一个解即可。

线性查找:以时间换空间

考虑直接遍历所有可能的组合。我们开启一个两层循环,在每轮中判断两个整数的和是否为 target ,若是,则返回它们的索引。

/* 方法一:暴力枚举 */
int[] twoSumBruteForce(int[] nums, int target) {int size = nums.length;// 两层循环,时间复杂度为 O(n^2)for (int i = 0; i < size - 1; i++) {for (int j = i + 1; j < size; j++) {if (nums[i] + nums[j] == target)return new int[] { i, j };}}return new int[0];
}

此方法的时间复杂度为 𝑂(𝑛2 ) ,空间复杂度为 𝑂(1) ,在大数据量下非常耗时。

哈希查找:以空间换时间

考虑借助一个哈希表,键值对分别为数组元素和元素索引。循环遍历数组

  1. 判断数字 target - nums[i] 是否在哈希表中,若是,则直接返回这两个元素的索引。
  2. 将键值对 nums[i] 和索引 i 添加进哈希表。
/* 方法二:辅助哈希表 */
int[] twoSumHashTable(int[] nums, int target) {int size = nums.length;// 辅助哈希表,空间复杂度为 O(n)Map<Integer, Integer> dic = new HashMap<>();// 单层循环,时间复杂度为 O(n)for (int i = 0; i < size; i++) {if (dic.containsKey(target - nums[i])) {return new int[] { dic.get(target - nums[i]), i };}dic.put(nums[i], i);}return new int[0];
}

此方法通过哈希查找将时间复杂度从 𝑂(𝑛2 ) 降至 𝑂(𝑛) ,大幅提升运行效率。

由于需要维护一个额外的哈希表,因此空间复杂度为 𝑂(𝑛)尽管如此,该方法的整体时空效率更为均衡, 因此它是本题的最优解法。

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

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

相关文章

一站式开发速查表大全 - 覆盖主流编程语言与工具

这是一个全面的编程速查表集合项目,涵盖了从基础编程语言到现代开发框架的完整参考资料。包含JavaScript、Python、Java、Go等主流语言,以及React、Vue、Angular等前端框架,还有Docker、Kubernetes、Git等开发工具的…

gcc系编译器、调试器的应用和c/c++编译原理

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

JAVA FX初次使用并制作辅助工具指南

JAVA FX初次使用并制作辅助工具指南先上功能截图讲讲第一次使用的体验。 JAVA FX还是非常友好很好使用的 IDEA新建FX项目的时候就能把很多功能都选上。 这些pom是适配了jdk21的,不同版本的fx组件适配jdk也不一样,我是…

Day6综合案例1-体育新闻列表

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">…

题解:AT_agc015_e [AGC015E] Mr.Aoki Incubator

原题链接:link。 自然想到建立坐标系,以速度为纵轴,初始点为横轴。 以样例二为例来分析:考虑将点两两连线: ` 其中红线为斜率为负数的线,容易知道点 \((x_i,v_i)\) 与点 \((x_j,v_j)\) 所连成的线的斜率为 \(\fr…

SNP特征通道数是什么意思

在《【已阅】cropformer.pdf》的基因组预测场景中,“SNP特征通道数”本质是SNP基因型经过编码后,每个SNP位点对应的数值特征所占用的“维度/通道数量”,是Hyena算子、CNN等模型组件处理SNP数据时的核心维度参数(d_…

CF1482E Skyline Photo

绝世唐题,为啥没有人写题解啊。 首先发现划分成若干个段,设一个 DP \(f_i\) 表示以 \(i\) 结尾的分段方式的最大贡献,那么朴素转移就是你去枚举区间取 \(\max\)。 发现是求 \(h\) 的最小值所对应的 \(b\),比较典的…

sqlserver 添加或修改字段

添加字段ALTER TABLE 表名 ADD 列名 数据类型 [约束];修改字段 ALTER TABLE 表名 ALTER COLUMN 列名 新数据类型;

最小瓶颈生成树

作业是鸽子更新的动力。\(\text{MBST}\)(\(\text{Minimum Bottleneck Spanning Tree}\))指的是求一颗生成树,其中最大的边权最小(所以也叫 \(\text{min-max spanning tree}\))。和最小树形图一样,也有有向图版本…

Linux系统常用操作指令简明指南

Linux系统常用操作指令简明指南 熟练掌握Linux命令是每个开发者的基本功。这份指南凝聚了我多年开发经验中的精华,将帮助您提高工作效率,解决实际问题。请记住,Linux哲学的核心在于"每个工具做好一件事,然后将…

小程序语音通话让智能设备会“说话”

小程序语音通话让智能设备会“说话”在万物互联的智能时代,如何让智能设备与用户建立更自然、更高效的连接,成为产品脱颖而出的关键。传统的APP推送常因步骤繁琐、易被淹没而效率低下,微信小程序语音通话应运而生,…

易基因: NG (IF29):颠覆认知!深圳仙湖植物园刘阳团队WGBS及超级泛基因组分析揭示苔藓植物基因家族比维管植物更丰富|项目文章

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 近日,由深圳市中国科学院仙湖植物园董珊珊博士等为第一作者、刘阳研究员等为通讯作者,在国际著名期刊《Nature Genetics》(自然-遗传学)上发表题…

2025年口碑好的工业制冷供应厂家推荐

文章摘要 本文深入解析2025年工业制冷供应厂家的关键选择标准,聚焦阜阳市展翼翔制冷技术有限公司的核心优势,包括设备集成化、高效制冷技术和全生命周期服务。通过技术参数分析和客户案例,帮助用户识别口碑好的供应…

2025 年 150 吨地磅,180 吨地磅,200 吨地磅厂家最新推荐,产能、专利、环保三维数据透视!

引言 在港口运输、矿产开采、重型制造等领域,150 吨、180 吨、200 吨级地磅作为核心称重设备,其精度与稳定性直接关系到企业运营成本与数据可信度。当前市场中部分厂家存在大吨位产品承重性能不足、核心部件耐用性差…

MySql8.0公共表表达式『CTE』

Mysql8.0支持CTE语法,这样就支持递归查询树状结构表功能了,极大方便了树状结构表的处理CTE是『common table expression』的缩写,中文翻译过来就是『公共表表达式』,使用它可以为临时查询结果命名,命名后可以在后…

2025 年进口地磅,出口地磅,100 吨地磅,120 吨地磅厂家最新推荐,产能、专利、环保三维数据透视!

引言 随着全球地磅市场年复合增长率达到 4.2%,100 吨、120 吨等中大型地磅需求持续攀升,进口与出口贸易规模同步扩大,但市场品牌良莠不齐的问题仍未解决。为精准甄选优质厂家,本次测评联合行业权威机构,基于三大核…

精通CTS与低功耗时钟设计

1、CTS在数字化时代的重要性 在数字化时代,IC(集成电路)设计日趋复杂,性能与功耗成为设计中的核心挑战。时钟树合成(CTS,Clock Tree Synthesis)作为物理实现流程中的关键环节,其目标是建立一个时钟分布网络,让…

GISDataMgr(数据管理工具)

瓦片导出工具,按需可以对数据包进行按照区域导出默认按省导出数据:也可以自定义导出区域:

202510月年口碑好的板式家具品牌前十榜单推荐

文章摘要 板式家具行业在2025年持续发展,注重环保、定制化和智能化趋势。本文基于市场调研和用户反馈,整理了板式家具品牌排名前十的列表,供消费者参考。排名综合考虑了品牌实力、产品质量、服务口碑等因素,旨在帮…