news 2026/8/17 12:01:06

leetCode-热题100-哈希合集(JavaScript)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetCode-热题100-哈希合集(JavaScript)

哈希合集

  • 1-两数之和
  • 2-字母异位词分组
  • 3-最长连续序列

1-两数之和

题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
题解

var twoSum=function(nums, target){// 使用哈希表解题 const map=new Map();// 遍历数组 for(let i=0;i<nums.length;i++){// 查找map中是否有target - nums[i]的value值,如有,返回其key和当前数组元素的下标 if(map.has(target - nums[i])){return[map.get(target-nums[i]),i]}// 未在map的value中找到另一个数,将当前数组元素值以及数组索引下标加入map中 map.set(nums[i],i)}// 找不到返回空值return[]};

使用Map数据结构来存储每个数字对应的下标
● key是数字的值
● value的该数字在数组中的位置
遍历源数组,当前遍历到的数字为nums[i],如果Map中存在以 target - nums[i]为key值的元素,说明找到了两个数字加起来等于target的值,这时候返回当前索引和 Map中以 target - nums[i]为key值对应的value值即可。

2-字母异位词分组

题目描述
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
解释:
● 在 strs 中没有字符串可以通过重新排列来形成 “bat”。
● 字符串 “nat” 和 “tan” 是字母异位词,因为它们可以重新排列以形成彼此。
● 字符串 “ate” ,“eat” 和 “tea” 是字母异位词,因为它们可以重新排列以形成彼此。
题解

var groupAnagrams=function(strs){// 使用哈希表解题 const map=new Map()// 遍历字符数组 for(let s of strs){// 使用split()将字符串分割成单个字符 // 使用sort()将字符数组排序,返回字符数组 // 使用join()将排序后的字符数组连接成字符串 // sortS作为哈希表的key值,具有唯一性 const sortedS=s.split('').sort().join('')// 当前map中没有此key值,将key值存入map,value值设为空数组 if(!map.has(sortedS)){map.set(sortedS,[])}// 当前map中有此key值,将当前原始字符串存入map的value数组中 map.get(sortedS).push(s)}// map.values()获取map中的所有value // Array.from()转成数组返回returnArray.from(map.values())};

时间复杂度:O(nmlogm),其中 n 为 strs 的长度,m 为 strs[i] 的长度。每个字符串排序需要 O(mlogm)的时间,有 n 个字符串,所以总的时间复杂度为 O(nmlogm)。 空间复杂度:O(nm)。
使用哈希表分组,将排序后的str[i]作为哈希表的key,排序前的str[i]最为哈希表的value

3-最长连续序列

题目描述
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
题解

var longestConsecutive=function(nums){// 使用哈希集合解题(只需要存储value),无重复、可快速查询的元素集合 constset=new Set(nums)// 初始化最长连续序列的长度letans=0// 遍历哈希集合 for(let s ofset){// 判断集合的当前元素是否是起点[一个序列的「起点 s」,一定满足「s-1 」不在set中]if(set.has(s-1)){// 当前元素不是最长连续序列的起点,直接跳过continue}// 判断当前元素下一个连续的元素值是否在set中lety=s +1while(set.has(y)){y++}// 更新最长序列的长度 ans=Math.max(ans,y-s)// 优化剪枝:如果当前最长长度的2倍 ≥ 集合总大小,直接终止循环 if(ans *2>set.size){break}}returnans};

使用哈希集合,利用Set()方法将数组转换成哈希集合(无序无重复),之后遍历哈希集合set,不断记录以当前节点为起点的连续序列的长度,最后做剪枝优化

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

警惕AI的“脑补”神技:大模型幻觉 (AI Hallucination) 完全指南

生活中的例子 01- 律师用ChatGPT写法律文书&#xff0c;结果AI引用了根本不存在的最高法院案例。生活中的例子 02- 程序员让AI推荐一个代码库&#xff0c;AI给出了一个名字极其逼真但实际不存在的库名。生活中的例子 03- 学生问AI某位不知名历史人物的生平&#xff0c;AI把另一…

作者头像 李华
网站建设 2026/8/16 9:44:05

5分钟构建企业级身份认证系统:Ory Hydra完全指南

5分钟构建企业级身份认证系统&#xff1a;Ory Hydra完全指南 【免费下载链接】hydra OpenID Certified™ OpenID Connect and OAuth Provider written in Go - cloud native, security-first, open source API security for your infrastructure. SDKs for any language. Works…

作者头像 李华
网站建设 2026/8/16 5:26:03

9 个专科生开题报告工具,降AI率AI推荐

9 个专科生开题报告工具&#xff0c;降AI率AI推荐 论文路上的“拦路虎”&#xff1a;专科生如何突围&#xff1f; 对于许多专科生来说&#xff0c;开题报告不仅是一项学术任务&#xff0c;更是一场与时间、压力和自我怀疑的拉锯战。从选题到文献综述&#xff0c;再到内容撰写和…

作者头像 李华
网站建设 2026/8/17 10:31:27

10个自考降AI工具推荐,解决文献综述AI率难题!

10个自考降AI工具推荐&#xff0c;解决文献综述AI率难题&#xff01; AI检测飘红&#xff0c;论文改写陷入困境 对于自考学生而言&#xff0c;论文写作从来都不是一件轻松的事情。尤其是当面对“文献综述”这一环节时&#xff0c;许多同学都会感到力不从心。随着人工智能技术的…

作者头像 李华
网站建设 2026/8/17 3:37:50

IDEA插件专注阅读工具:程序员专属的高效阅读空间

还在为工作间隙想阅读却担心影响工作专注度而烦恼吗&#xff1f;作为程序员&#xff0c;我们每天都要在IDEA中度过大量时间&#xff0c;有没有一种方法能够让我们在不离开开发环境的情况下享受阅读的乐趣&#xff1f;今天介绍的这款IDEA阅读插件&#xff0c;正是为解决这一痛点…

作者头像 李华
网站建设 2026/8/17 7:41:08

Git操作实战:从GitHub镜像拉取Qwen-Image并本地部署

Git操作实战&#xff1a;从GitHub镜像拉取Qwen-Image并本地部署 在AI生成内容&#xff08;AIGC&#xff09;迅速普及的今天&#xff0c;越来越多企业与开发者希望将前沿文生图模型部署到本地环境&#xff0c;以实现数据可控、响应高效的内容生产。然而&#xff0c;面对动辄数十…

作者头像 李华