首页 > 技术文章 > 存在重复

jjq-exchange 2019-07-02 10:25 原文

给定一个整数数组,判断是否存在重复元素。

如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。

 

  1.方法一(暴力解法)

这个解法是第一时间脑海中反应出来的思路十分简单暴力
1.就是每一次都与后N个数对比 不存在就接着下一个和后N个对比
2.如果遇到相同则返回 true 反之就false

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

方法二( 该方法在写完方法一后,想着会有更优解,同时想到es6的set 去重后 利用该方法判断)
1利用es6 的set去重 再使用 Array.form方法将 set之后的对象转化为数组
 2.将转化后的的数组和原数组比较 长度相等则返回 false 反之里面必有重复 返回 true

/*
* * @param {number[]} nums * @return {boolean} */ var containsDuplicate = function(nums) { var news = Array.from(new Set(nums)); return news.length !== nums.length ? true : false ; };

 方法三 

思路
  1. 利用一个对象作为临时存储,同时利用对象KEY存在会返回对应值原理,查找是否重复
  2. 对传入数组循环,若不存在则,将该索引下数组内容作为对象KEY并赋值为true,若再有这个数遇到则可利用其做相应判断
3. 若全程未遇到则返回false

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

 

推荐阅读