算法题
存在重复元素:
给你一个整数数组 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():用于对集合成员执行某种操作,没有返回值