js数据结构之字典 附leetcode算法提

本文介绍了JavaScript Map在算法中的实际运用,如查找、添加、删除和修改键值对,以及在解决力扣问题349、1和3中的角色。通过实例演示了如何利用Map高效地求交集、求和并找到无重复字符的最长子串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字典

  • 与集合类似,字典也是一种存储唯一值的数据结构,但它是以键值对的形式来存储
  • ES6中有字典,名为Map
  • 字典的常用操作:键值对的增删改查
const m = new Map()

// 新增一个以a为键,aa为值的字典
m.set('a', 'aa')
m.set('b', 'bb')
// 查询
m.get('a') // aa
// 删除
m.delete('b')
// m.clear() // 删除所有的键
// 改
m.set('a', 'aaa')
m.get('a') // aaa
力扣 349:两个数组的交集

在这里插入图片描述

349 解题思路
  • 求nums1和nums2都有的值
  • 用字典建议一个映射关系,记录nums1里有的值
  • 遍历nums2,找出nums1里也有的值
// 时间复杂赋O(m)+O(n) 空间复杂度O(m)
var section = function(nums1, nums2) {
	const map = new Map()
	nums1.forEach(n => {
		map.set(m, true)
	})
	const res = []
	nums2.forEacn(n => {
		if (map.get(n)) {
			res.push(n)
			map.delete(n)
		}
	})
	return res
}
力扣 1: 两个数之和

在这里插入图片描述

// 时间复杂度O(n) 空间复杂度O(n)
function sum (nums, target) {
	const map = new Map()
	for (let i = 0; i < nums.length; i++) {
		const n = nums[i]
		const n2 = target - n
		if (map.has(n2)) {
			return [map.get(n2), i]
		} else {
			map.set(n, i)
		}
	}
}
力扣 3:无重复字符的最长子串

在这里插入图片描述

3 解题思路
  • 利用双指针(两个变量),找出所有的不含重复字符的子串
  • 找出长度最大那个子串(即右指针减去左指针),返回其长度即可
// 时间复杂度O(n) 空间复杂度O(n)
function longSubstr(s) {
	let l = 0 // 左指针
	let res = 0 // 计算的最大不重复长度
	const map = new Map() // 创建Map字典
	for (let r = 0; r < s.length; r ++) {
		// 如果存在字典 并且 当前存在的索引大于等于左指针
		if (map.has(s[r]) && map.get(s[r]) >= l) {
			// 左指针基于当前存在的字典向右移动一位 也就是+1
			l = map.get(s[r]) + 1
		}
		// 取res的最大长度
		res = Math.max(res, r - l + 1)
		// 设置字典的key及value
		map.set(s[r], r)
	}
	// 返回最大的长度
	return res
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值