阅读 82

JavaScript版:数据结构之“字典”

1. 字典简介

  • 与集合类似,字典也是一种存储唯一值的数据结构,但它是以键值对的形式来存储。

  • 使用 ES6 Map

1.1 字典的常用操作

const m = new Map(); // 增 m.set('a', 'aa'); m.set('b', 'bb'); // 删 m.delete('b'); m.clear(); // 改 m.set('a', 'aaa') // 查 m.get('a'); 复制代码

2. LeetCode: 349. 两个数组的交集

image.png

2.1 解题思路

  • 求nums1 和 nums2 多都有的值

  • 用字典建立一个映射关系,记录nums1里有的值

  • 遍历nums2,找出nums1 里也有的值

2.2 解题步骤

  • 新建一个字典,遍历nums1,填充字典

  • 遍历nums2, 遇到字典里的值就选出,并从字典中删除。

/**  * @param {number[]} nums1  * @param {number[]} nums2  * @return {number[]}  */ var intersection = function (nums1, nums2) {     // 集合Set 实现方式     // return [...new Set(nums1)].filter(item => nums2.includes(item))          const map = new Map();     nums1.forEach(n => {         map.set(n, true)     })     const res = [];     nums2.forEach(n => {         if (map.get(n)) {             res.push(n);             map.delete(n);         }     })     return res }; 复制代码

3. LeetCode:20. 有效的括号

image.png

/**  * @param {string} s  * @return {boolean}  */ var isValid = function (s) {     if (s.length % 2 === 1) { return false }     const stack = [];     const map = new Map();     map.set('(', ')')     map.set('[', ']')     map.set('{', '}')     for (let i = 0; i < s.length; i += 1) {         const c = s[i];         if (c === '(' || c === '{' || c === '[') {             stack.push(c)         } else {             const t = stack[stack.length - 1];             if (                map.get(t) === c             ) {                 stack.pop();             } else {                 return false;             }         }     }     return stack.length === 0; }; 复制代码

4. LeetCode: 1. 两数之和

image.png

4.1 解题思路

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

  • 把nums 想象成相亲者

  • 把target 想象成匹配条件

  • 用字典建立一个婚姻介绍所,存储相亲者的数字和下标

4.2 解题步骤

  • 新建一个字典作为婚姻介绍所

  • nums 里的值,逐个来介绍找对象,没有何止的就先登记者,有合适的就牵手

/**  * @param {number[]} nums  * @param {number} target  * @return {number[]}  */ var twoSum = function (nums, target) {     const map = new Map()     for (let i = 0; i < nums.length; i += 1) {         const n = nums[i];         const n2 = target - n;         if (map.has(n2)) {             return [map.get(n2), i]         } else {             map.set(n, i)         }     } }; 复制代码

执行用时:56 ms, 在所有 JavaScript 提交中击败了99.77%的用户

内存消耗:39.9 MB, 在所有 JavaScript 提交中击败了37.04%的用户

内存消耗为 O(n), 我们可以通过二分查找,用时间换空间的方式,进行处理

5. LeetCode: 3. 无重复字符的最长子串

6. LeetCode: 76. 最小覆盖子串

7. 总结:

  • 与集合类似,字典也是一种存储唯一值的数据结构,但是它以键值对的形式来存储

  • ES6中有字典,名为Map

  • 字典的常用操作:键值对的增删改查


作者:服部
链接:https://juejin.cn/post/7023981920425869326

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐