news 2026/5/1 5:47:01

[特殊字符] LeetCode 哈希表经典三题总结:1、49、128(思路 + 代码 + 模板)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[特殊字符] LeetCode 哈希表经典三题总结:1、49、128(思路 + 代码 + 模板)

在 LeetCode 的题目体系中,哈希表(Hash Table)是最常见、最重要的数据结构之一。

它的核心优势是:

用空间换时间,将查找复杂度从 O(n) 降到 O(1)。

很多面试高频题都离不开哈希表的思想。

本篇博客将系统总结三道最经典的哈希表入门题:

  • 1. 两数之和(Two Sum)

  • 49. 字母异位词分组(Group Anagrams)

  • 128. 最长连续序列(Longest Consecutive Sequence)

并通过这三题掌握哈希表最核心的三种用法:

✅ 查补数

✅ 分组映射

✅ 连续序列判断



一、LeetCode 1:两数之和(Two Sum)

1. 两数之和 - 力扣(LeetCode)


1. 题目描述

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

示例

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

2. 暴力思路(不可取)

最直观的方法是双重循环:

for i: for j: if nums[i] + nums[j] == target

时间复杂度:

O(n²)

当 n 达到 10⁵ 时直接超时。


3. 哈希表优化思路

核心思想:查找补数

遍历数组时:

  • 当前数字为x

  • 需要另一个数字need = target - x

如果之前出现过need,说明答案已找到。

因此我们使用哈希表:

  • key:数字

  • value:数字出现的位置


4. C++代码实现

class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> mp; for (int i = 0; i < nums.size(); i++) { int need = target - nums[i]; if (mp.count(need)) { return {mp[need], i}; } mp[nums[i]] = i; } return {}; } };

5. 复杂度分析

操作复杂度
遍历数组O(n)
哈希查找O(1)
总复杂度✅ O(n)


二、LeetCode 49:字母异位词分组(Group Anagrams)


1. 题目描述

给定字符串数组strs,请你将所有字母异位词分组。

字母异位词:

  • 字母相同

  • 顺序不同

示例

输入:["eat","tea","tan","ate","nat","bat"] 输出: [ ["eat","tea","ate"], ["tan","nat"], ["bat"] ]

2. 哈希表的核心:分类映射

异位词的本质

两个字符串是异位词:

排序后一定完全相同。

例如:

原字符串排序后
eataet
teaaet
ateaet

因此可以用:

  • key:排序后的字符串

  • value:所有属于该 key 的字符串集合


3. 解题步骤

  1. 遍历字符串数组

  2. 对每个字符串排序得到 key

  3. 放入哈希表中分类

  4. 最后输出所有组


4. C++代码实现

class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { unordered_map<string, vector<string>> mp; for (auto& s : strs) { string key = s; sort(key.begin(), key.end()); mp[key].push_back(s); } vector<vector<string>> result; for (auto& p : mp) { result.push_back(p.second); } return result; } };

5. 复杂度分析

设:

  • n 为字符串数量

  • k 为字符串平均长度

排序复杂度:

O(k log k)

总复杂度:

O(n * k log k)


三、LeetCode 128:最长连续序列(Longest Consecutive Sequence)


1. 题目描述

给定一个未排序整数数组nums,找出数字连续的最长序列长度。

要求算法复杂度必须为:

O(n)

示例

输入:nums = [100,4,200,1,3,2] 输出:4 解释:最长连续序列是 [1,2,3,4]

2. 核心难点

排序可以解决:

sort(nums)

但复杂度:

O(n log n)

题目要求必须 O(n)。


3. 哈希集合解法:从起点扩展

核心思想

如果数字x是一个连续序列的起点:

x - 1 不存在

例如:

序列[1,2,3,4]

起点只有 1,因为:

  • 1-1 = 0 不存在

所以:

  • unordered_set存所有数字

  • 只从起点开始扩展

  • 每个数字最多访问一次


4. C++代码实现

class Solution { public: int longestConsecutive(vector<int>& nums) { unordered_set<int> st(nums.begin(), nums.end()); int longest = 0; for (int x : st) { // 只有当 x 是起点才扩展 if (!st.count(x - 1)) { int cur = x; int len = 1; while (st.count(cur + 1)) { cur++; len++; } longest = max(longest, len); } } return longest; } };

5. 复杂度分析

操作复杂度
建集合O(n)
扩展遍历O(n)
总复杂度✅ O(n)


四、三题核心套路总结


题号题目哈希结构核心思想
1Two Sumunordered_map查补数
49Group Anagramsunordered_map<string,vector>分类映射
128Longest Consecutiveunordered_set起点扩展

五、哈希表题目三大模板


模板 1:查找补数

need = target - x; if (mp.count(need)) return ans;

模板 2:分类映射

key = transform(x); mp[key].push_back(x);

模板 3:存在性判断 + 起点扩展

if (!st.count(x-1)) { while(st.count(x+1)) ... }

六、总结

通过这三道经典题,你应该掌握哈希表在 LeetCode 中最常见的三种用途:

✅ 快速查找

✅ 分类分组

✅ 判断连续关系

哈希表题目看似简单,但却是面试必考的基础能力。


📌 下一步推荐练习(哈希专题)

如果你想继续刷哈希题,可以按顺序练:

  • 217 存在重复元素

  • 242 有效的字母异位词

  • 560 和为 K 的子数组

  • 347 前 K 个高频元素

  • 15 三数之和(哈希 + 双指针)


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

embeddinggemma-300m惊艳效果展示:ollama本地部署后跨语言语义匹配实测

embeddinggemma-300m惊艳效果展示&#xff1a;ollama本地部署后跨语言语义匹配实测 1. 为什么这个3亿参数的嵌入模型值得你停下来看一眼 你有没有试过用中文搜索英文文档&#xff0c;却只得到一堆不相关的网页&#xff1f;或者把一段法语产品描述扔进检索系统&#xff0c;结果…

作者头像 李华
网站建设 2026/4/18 20:59:59

ANIMATEDIFF PRO作品分享:多角色交互场景(对话/追逐/协作)生成

ANIMATEDIFF PRO作品分享&#xff1a;多角色交互场景&#xff08;对话/追逐/协作&#xff09;生成 1. 这不是普通动图&#xff0c;是能“演戏”的AI视频工作站 你有没有试过让AI生成的视频里&#xff0c;两个人真的在说话&#xff1f;不是嘴型对不上、动作不连贯的“幻灯片式…

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

使用CosyVoice进行GRPO微调:从原理到实践的完整指南

使用CosyVoice进行GRPO微调&#xff1a;从原理到实践的完整指南 摘要&#xff1a;在语音合成领域&#xff0c;GRPO&#xff08;Gradient Reversal for Prosody Optimization&#xff09;微调技术能显著提升语音的自然度和表现力&#xff0c;但实现过程中常面临梯度不稳定和训练…

作者头像 李华
网站建设 2026/4/27 11:27:31

Z-Image Turbo效果巡展:人物、风景、抽象艺术作品集

Z-Image Turbo效果巡展&#xff1a;人物、风景、抽象艺术作品集 1. 这不是“又一个”AI画图工具&#xff0c;而是你本地电脑上的专业级画板 你有没有试过——输入一段提示词&#xff0c;按下回车&#xff0c;3秒后一张高清图就铺满整个屏幕&#xff1f;没有排队等待&#xff…

作者头像 李华
网站建设 2026/4/18 9:24:38

EcomGPT电商智能助手效果展示:从杂乱描述到结构化JSON属性的全过程

EcomGPT电商智能助手效果展示&#xff1a;从杂乱描述到结构化JSON属性的全过程 1. 这不是“又一个AI工具”&#xff0c;而是电商人手边的“文字翻译官” 你有没有遇到过这样的场景&#xff1a; 刚收到供应商发来的一长段商品描述——“2024新款韩系修身显瘦小香风短款西装外套…

作者头像 李华
网站建设 2026/4/27 7:50:09

蜂答AI智能客服核心技术解析:从架构设计到高并发优化

蜂答AI智能客服核心技术解析&#xff1a;从架构设计到高并发优化 摘要&#xff1a;本文深入解析蜂答AI智能客服系统的核心技术架构&#xff0c;针对高并发场景下的性能瓶颈问题&#xff0c;提出基于微服务和无状态设计的优化方案。通过对比传统单体架构与云原生方案的差异&…

作者头像 李华