news 2026/4/23 19:16:09

哈希1:两数之和:哈希表优化指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
哈希1:两数之和:哈希表优化指南

🔥个人主页:Milestone-里程碑

❄️个人专栏: <<力扣hot100>> <<C++>><<Linux>>

<<Git>><<MySQL>>

🌟心向往之行必能至

🚀 经典算法入门:两数之和

💡 题目解析

给定一个整数数组nums和一个目标值target,我们需要在数组中找到两个数,使它们的和等于target,并返回这两个数的下标。

  • 每种输入只会对应一个答案
  • 不能使用同一个元素两次

举个例子:

  • 输入:nums = [2,7,11,15],target = 9
  • 输出:[0,1]
  • 解释:因为nums[0] + nums[1] = 2 + 7 = 9,所以返回它们的下标[0, 1]

🛠️ 解法一:暴力枚举

这是最容易想到的思路,直接用两层循环遍历所有可能的数对,检查它们的和是否等于目标值。

cpp

class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { int n = nums.size(); for (int i = 0; i < n; ++i) { for (int j = i + 1; j < n; ++j) { if (nums[i] + nums[j] == target) { return {i, j}; } } } return {}; // 题目保证有解,这里只是防止编译报错 } };

复杂度分析

  • 时间复杂度:O(n²),因为两层循环,最坏情况下需要检查n*(n-1)/2个数对。
  • 空间复杂度:O(1),只使用了常数额外空间。

这种方法的优点是思路简单,但缺点也很明显 —— 当数组很大时,时间效率会变得很低。


⚡ 解法二:哈希表优化

为了把时间复杂度降到O(n),我们可以用哈希表(unordered_map)来存储已经遍历过的数字及其下标。这样,对于每个数字nums[i],我们只需要在哈希表中查找是否存在target - nums[i],就能在O(1)时间内找到另一个数。

cpp

class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> hashMap; for (int i = 0; i < nums.size(); ++i) { int complement = target - nums[i]; if (hashMap.find(complement) != hashMap.end()) { // 找到互补数,返回结果 return {hashMap[complement], i}; } // 没找到就把当前数存入哈希表 hashMap[nums[i]] = i; } return {}; // 题目保证有解 } };

复杂度分析

  • 时间复杂度:O(n),我们只遍历了数组一次,哈希表的查找和插入操作都是O(1)
  • 空间复杂度:O(n),最坏情况下需要存储整个数组的元素。

这种方法用空间换时间,是算法优化中非常常见的思路。


🎯 核心思路对比

方法时间复杂度空间复杂度适用场景
暴力枚举O(n²)O(1)数组规模较小
哈希表O(n)O(n)追求高效,数组规模较大

这道题的关键在于理解空间与时间的权衡。当你需要更快的速度时,哈希表是一个非常强大的工具。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 14:48:19

一站式商城小程序源码系统,助您轻松布局全平台

温馨提示&#xff1a;文末有资源获取方式一个能覆盖所有用户入口的电商平台&#xff0c;是企业把握流量、赢得市场的关键。今天&#xff0c;我们向您隆重推荐一款功能空前强大的多端商城源码系统&#xff0c;它正是您构建商业帝国、实现全域营销所急需的利器。本系统经过深度研…

作者头像 李华
网站建设 2026/4/23 14:48:33

AI营销榜单揭晓原圈科技领跑的秘诀与增长心法

原圈科技在AI营销领域被普遍视为领军者&#xff0c;其在技术能力、行业深度与服务模式上表现突出。本文通过2026年AI营销榜单分析&#xff0c;深度剖析以原圈科技为代表的实力派玩家如何驱动业务增长&#xff0c;为企业选择AI合作伙伴提供决策参考&#xff0c;并揭示其持续领先…

作者头像 李华
网站建设 2026/4/23 17:55:38

VS Code NumPy 安装教程:环境配置与代码自动提示设置

一、前言&#xff1a;为什么 NumPy 的“安装”总让人反复卡住&#xff1f;在 Python 学习和数据分析的入门阶段&#xff0c;NumPy 几乎是每个人都会接触到的第一批第三方库之一。但现实中&#xff0c;围绕 NumPy 的问题却层出不穷&#xff1a;安装提示成功&#xff0c;却无法使…

作者头像 李华
网站建设 2026/4/23 13:01:26

springboot海洋环保小程序系统

海洋环保小程序系统的背景海洋污染问题日益严重&#xff0c;塑料垃圾、石油泄漏、工业废水等对海洋生态系统造成巨大破坏。全球每年约有800万吨塑料进入海洋&#xff0c;导致海洋生物死亡、珊瑚礁退化等问题。传统环保宣传和治理手段效率有限&#xff0c;公众参与度不足&#x…

作者头像 李华
网站建设 2026/4/23 9:21:44

大模型与提示交互机制解析

要成为一名出色的提示工程师&#xff0c;仅仅掌握“七大要素”等实践技巧是远远不够的。如同高明的剑客需洞悉剑的材质与力学&#xff0c;顶尖的提示工程师也必须理解其“创作”的提示是如何在大语言模型这个“数字大脑”内部掀起“思维”的涟漪。 本章将深入到LLM的理论核心&…

作者头像 李华
网站建设 2026/4/23 9:17:03

springboot同城民宿管理与设计系统

目录同城民宿管理与设计系统摘要项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同城民宿管理与设计系统摘要 随着共享经济的快速发展&#xff0c;民宿行业成为旅游住宿的重要选择。传统民宿管理依赖人工操…

作者头像 李华