0
点赞
收藏
分享

微信扫一扫

JavaScript实现数据结构 -- 字典

字典

字典与集合类似,也是一种存储唯一值的数据结构,字典以键值对的形式进行存储,在ES6中有字典Map

字典的常用操作

使用set()方法可以向字典中添加新成员,可连续添加。 在这里插入图片描述

使用delete()方法可以删除字典成员,删除字典中不存在的成员不报错。 在这里插入图片描述

使用clear()方法清空字典成员。 在这里插入图片描述

使用set()方法可以向字典中添加新成员时,如果新成员的键已存在,那么将会覆盖以存在的键。 在这里插入图片描述

使用get()方法可以通过字典的键,来访问其对应的值,如果获取不存在的键,则返回undefined。 在这里插入图片描述 在这里插入图片描述

字典的应用

两个数组的交集(leetcode:349)

在这里插入图片描述

思路

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

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

代码

	var intersection = function(nums1, nums2) {
	    const m = new Map();
	    nums1.forEach(n => {
	        m.set(n, true);
	    });
	    const arr = [];
	    nums2.forEach(n => {
	        if(m.get(n)){
	            arr.push(n);
	            m.delete(n);
	        }
	    });
	    return arr;
	};

在这里插入图片描述

两数之和(leetcode:1)

在这里插入图片描述

思路

建立一个集合,遍历数组;

如果当前元素和集合中的元素相加等于target, 则返回对应的下标;

不等于target,将当前元素做key,迭代变量(i)做value存入集合;

代码

	var twoSum = function(nums, target) {
	    const m = new Map();
	    for(let i = 0;i < nums.length;i++){
	        const n1 = nums[i];
	        const n2 = target - n1;
	        if(m.has(n2)){
	            return [i, m.get(n2)];
	        }else{
	            m.set(n1, i);
	        }
	    }
	};

在这里插入图片描述

无重复字符串的最长子串(leetcode:3)

在这里插入图片描述

思路

用双指针标记子串,不断移动右指针;

当遇见重复字符时,左指针移动到重复字符的下一位;

最后返回子串的长度;

代码

var lengthOfLongestSubstring = function(s) {
	//定义左指针
    let l = 0;
    //定义子串长度初始为0
    let len = 0;
    //定义集合
    const m = new Map();
    //遍历字符串
    for(let r = 0;r < s.length;r++){
    	//在标记的子串中,遇到重复字符,左指针移动到重复字符的下一位
        if(m.has(s[r])&& m.get(s[r])>= l){
            l = m.get(s[r]) + 1;
        }
        //获取子串的最大长度
        len = Math.max(len, r - l + 1);
        //将标记的子串,存入集合
        m.set(s[r], r);
    }
    //返回子串的长度
    return len;
};

在这里插入图片描述

举报

相关推荐

0 条评论