哈希Map和Set函数

算法题

存在重复元素:

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

示例 1:

输入:nums = [1,2,3,1]
输出:true

示例 2:

输入:nums = [1,2,3,4]
输出:false

我写的:

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    
    for(let i=0;i<nums.length;i++){
        for(let j=nums.length;j>i;j--){
            if(nums[i]==nums[j]){
                return true
            }
        }
    }
    return false
};

别人写的:

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    const map = new Set();
    for(const x of nums) {//可以学习这种遍历方式
        if(map.has(x)) {
            return true;
        }
        map.add(x);
    }
    return false;
};

js的map和set详解: 原文链接:js的map和set详解_丑小鸭变黑天鹅的博客-CSDN博客_js set map

Map是键值对结构的,Set是一组key的集合(且没有重复元素),但不存储value

部分语法如下:

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined
var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}
s.add(4);//添加元素
s; // Set {1, 2, 3, 4}
s.add(4);
s; // 仍然是 Set {1, 2, 3, 4}
var s = new Set([1, 2, 3]);//删除元素
s; // Set {1, 2, 3}
s.delete(3);
s; // Set {1, 2}
const s = new Set();
 
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
 
for (let i of s) {
  console.log(i);   // 2 3 5 4
}
 
// 去除数组的重复成员
let array = [1,2,1,4,5,3];
[...new Set(array)]     // [1, 2, 4, 5, 3]
​
//Set语法
操作方法
add(value):向集合添加一个新的项
delete(value):从集合中移除一个值
has(value):如果值在集合中存在,返回true,否则false
clear(): 移除集合里所有的项
​
遍历方法
keys():返回一个包含集合中所有键的数组
values():返回一个包含集合中所有值的数组
entries:返回一个包含集合中所有键值对的数组(感觉没什么用就不实现了)
forEach():用于对集合成员执行某种操作,没有返回值

猜你喜欢

转载自blog.csdn.net/wulikunbing/article/details/128492703