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

【Hot100-Java便捷】:两数之和 (Two Sum) —— 从暴力枚举到哈希表的思维跃迁

【Hot100-Java便捷】:两数之和 (Two Sum) —— 从暴力枚举到哈希表的思维跃迁

1. 题目回顾

题目描述:

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

约束条件

  • 每种输入只会对应一个答案。

  • 数组中同一个元素在答案里不能重复出现。

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

示例

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

2. 方法一:暴力枚举 (Brute Force)

这是最直观的解题思路。这就好比我们在一个房间里找两个人,我们先拉住第1个人,然后去问剩下的所有人:“你是那个能和我配对的人吗?”如果不是,再拉住第2个人,重复这个过程。

思路与算法

  1. 枚举数组中的每一个数 x(作为第一个加数)。

  2. x 后面的元素中,寻找是否存在 target - x(作为第二个加数)。

  3. 一旦找到,立即返回两个数的下标。

代码实现

Java

class Solution {public int[] twoSum(int[] nums, int target) {int n = nums.length;// 第一层循环:选定第一个数for (int i = 0; i < n; ++i) {// 第二层循环:在 i 之后寻找第二个数for (int j = i + 1; j < n; ++j) {if (nums[i] + nums[j] == target) {return new int[]{i, j};}}}return new int[0];}
}

复杂度分析

  • 时间复杂度:$O(N^2)$

    其中 $N$ 是数组元素的数量。最坏情况下,我们需要遍历几乎所有的元素对。当数据量较大(例如 $N=10000$)时,计算量会达到 1亿次级别,效率较低。

  • 空间复杂度:$O(1)$

    除了存储变量,不需要额外的内存空间。


3. 方法二:哈希表 (Hash Map) —— 性能的飞跃

暴力法慢在哪里?慢在“寻找”。

我们在数组中寻找 target - x 时,不得不遍历整个后续数组,这需要 $O(N)$ 的时间。如果我们能把“寻找”的时间缩短到 $O(1)$ 呢?

这就需要用到哈希表 (Hash Map)

思路与算法

我们可以把哈希表想象成一个“备忘录”。

在遍历数组时,对于每一个数 nums[i]:

  1. 我们先算一下:为了凑齐 target,我需要哪个数?(即 need = target - nums[i])。

  2. 查备忘录:看看之前遍历过的数字里,有没有这个 need

    • 如果就在备忘录里:太好了,说明之前遇到过那个数,直接把它的下标拿出来,和当前的 i 一起返回。

    • 如果不在:把当前的数 nums[i] 和它的下标 i 记入备忘录,方便后面的数字来找我匹配。

代码实现

Java

class Solution {public int[] twoSum(int[] nums, int target) {// Key存数值,Value存下标HashMap map = new HashMap<>();for(int i = 0; i < nums.length; i++){int need = target - nums[i];// 查备忘录:看需要的那个数是否存在if(map.containsKey(need)){// 找到了!直接返回 [需要的数的下标, 当前数的下标]return new int[]{map.get(need), i};}// 没找到,把自己登记到备忘录map.put(nums[i], i);}return new int[0];}
}

复杂度分析

  • 时间复杂度:$O(N)$

    我们只需要遍历一次数组。在哈希表中查找元素的时间复杂度平均为 $O(1)$。

  • 空间复杂度:$O(N)$

    我们需要一个哈希表来存储已经遍历过的元素,最坏情况下需要存储 $N$ 个元素。


4. 总结与对比

特性暴力枚举法哈希表法
核心思想穷举所有组合边查边存(以空间换时间)
时间复杂度$O(N^2)$ (慢)$O(N)$ (快)
空间复杂度$O(1)$ (省内存)$O(N)$ (耗内存)
适用场景数据量极小,内存极其受限通用场景,追求运行速度

http://www.jsqmd.com/news/390070/

相关文章:

  • 键盘与鼠标:人机交互的奥秘深度解析:原理、实战与踩坑记录
  • OpenClaw怎么做到不串台、能并行、还总回对群 amp;#129302;✅(含源码解析)--OpenClaw系列第1期
  • GLM5.0发布:国产算力突破,大模型进化为智能工作系统,速来收藏学习!
  • AI产品经理转行大模型必读,央视都说AI大模型人才缺口大,为什么大家还是找不到工作?
  • Transformer大模型从入门到进阶:25+核心知识点解析(收藏版)
  • 2026主流电商小程序平台深度测评:功能优势与适用场景全解析
  • 论文阅读“EFFICIENT VISION-LANGUAGE-ACTION MODELS FOR EMBODIED MANIPULATION: A SYSTEMATIC SURVEY“
  • 【GitHub项目推荐--pySLAM:开源、模块化、可扩展的视觉SLAM框架】⭐⭐⭐⭐⭐
  • 当一家公司拥有37,000个智能体:科技投资公司企业AI治理实验
  • 在线图片压缩工具怎么选?几款免费好用的网站对比
  • 【GitHub项目推荐--ORB-SLAM2:开源实时视觉SLAM系统】
  • SpringBoot集成SpringAI与Ollama本地大模型
  • 深入解析:【开题答辩全过程】以 基于微信小程序的医疗物资进销存管理为例,包含答辩的问题和答案
  • 【Python】【机器学习】线性回归
  • 【Python】【机器学习】十大算法简介与应用
  • GitHub 热榜项目 - 日榜(2026-02-17)
  • 大模型开发 - 手写Manus之Sandbox执行代码:03 用Docker为AI Agent打造安全沙箱
  • C# 调用 Lua 完整技术文档
  • 叙事响应:《当预言泛起涟漪——碳硅智能时代的叙事开篇》
  • 【分享】《四十岁才是青春》-别人的四十岁创业史
  • 启蒙灯塔起源团预言—碳硅智能时代到来
  • 2026年测量仪口碑推荐:探寻行业佼佼者,扭矩仪/检测仪/试验机/测量仪/热封仪/测厚仪,测量仪供应商推荐排行 - 品牌推荐师
  • AI元人文:空性界面与空洞注册:阿尔茨海默病与重度抑郁症的存在论-意义论分析——跨学科应用研究的拓展与深化
  • 对象成员初始化问题
  • 利用DeepSeek和qwen 3.5辅助生成SQL优化方法幻灯片视频
  • 基于Java的房产售房智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 实用指南:中国制造网关键字搜索接口实战:跨境B2B视角的精准匹配与本地化适配方案
  • 基于Java的房产行业营销智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的房产中介智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • OpenClaw怎么做到不串台、能并行、还总回对群 ✅(含源码解析)--OpenClaw系列第1期