js前端算法题---字典&哈希表(散列表)

1.两数之和01

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

var twoSum = function(nums, target) {
    let hash=new Map();
    for(let i in nums){
        let num=target-nums[i]
        if(hash.has(num)){
            return [hash.get(num),i]
        }else{
            hash.set(nums[i],i)
        }
    }
};

2.存在重复元素217

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

var containsDuplicate = function(nums) {
    let hash=new Map();
    for(let i in nums){
        if(hash.has(nums[i])){
            return true
        }else{
            hash.set(nums[i],1)
        }
    }
    return false
};

3.两个数组的交集349

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

ar intersection = function(nums1, nums2) {
        let map1=new Set(nums1)
        let map2=new Set(nums2)
        let num=[]
        for(let i of map1){
            if(map2.has(i)){
                num.push(i)
            }
        }
        return num
};

4.独一无二出现次数1207

给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。

如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。
示例 1:

输入:arr = [1,2,2,1,1,3] 输出:true 解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。

   var uniqueOccurrences = function(arr) {
            let map1=new Map()
            let list=[]
            for(let i of arr){
                if (map1.has(i)){
                    map1.set(i,map1.get(i)+1)
                }else{
                    map1.set(i,1)
                }
            }
            for (let num of map1){
                list.push(num[1])
            }return list.length==Array.from(new Set(list)).length ? true:false
                
        };

知识点

一、栈、队列 : 进、出

二、链表、数组 : 多个元素存储组成的

区别一:
	数组:下标
	链表:next指针联系在一起
区别二:数据插入
	数组:如果在中间插入新的元素,其他元素会重新计算
	链表:不会重新计算,说白了是赋值或者替换的一种感觉
区别三:查找

	数组:通过下标进行查找即可
	链表:每次查找都需要从头开始找

三、字典

字典  :  键值对存储的,类似于js的对象(键[key]都是字符串类型或者会转换成字符串类型)

字典 ==》map来表示的,map的键不会转换类型

四、哈希表 又叫===》散列表

在js中没有哈希表,哈希表是字典一种实现。

区别一:如果找key对应的value需要遍历key,那么想要省去遍历的过程,用哈希表来表示。

区别二:排列顺序

	字典是根据添加的顺序进行排列的
	哈希表不是添加的顺序进行排列的

你可能感兴趣的:(javascript,前端,算法)