题目
给你一个整数数组
nums
。如果任一值在数组中出现 至少两次 ,返回true
;如果数组中每个元素互不相同,返回false
。
输入: nums = [1,1,1,3,3,4,3,2,4,2] 输出: true
思路一
我们可以使用Map数据结构来实现,我们先创建一个map变量,他是一个Map数据结构实例,然后使用循环,在循环中使用has方法,判断map变量中是否有当前循环的值,如果有则使用set方法将当前的map变量中循环值使用get方法进行更新,如果没有出现过的情况下,我们使用set方法将当前循环值作为key,值默认为1,存入map变量中,然后再遍历map中所有values,早循环中判断是否有大于1的数,如果有则表示nums形参中有重复元素,所以我们返回true,如果遍历结束仍没有符合条件的则表示nums形参中没有重复元素,我们直接返回false
/** * @param {number[]} nums * @return {boolean} */ var containsDuplicate = function (nums) { let map = new Map(); for (let i of nums) { if (map.has(i)) { map.set(i, map.get(i) + 1) } else { map.set(i, 1) } } for (let i of map.values()) { if (i > 1){ return true } } return false };
思路二
我们这里还可以使用排序进行实现,我们先使用sort方法对nums形参做从小到大排序,然后在创建一个n变量用于存储形参nums数组的长度,然后对使用循环遍历n次,因为我们对数组进行排序过了,所以数组中重复的元素一定会出现在相邻的位置,所以我们每次循环判断当前循环值和下一个循环值是否相等即可,如果相等则为重复的元素,返回true即可,如果循环完没有返回true,说明没有重复的元素,返回false即可
/** * @param {number[]} nums * @return {boolean} */ var containsDuplicate = function(nums) { nums.sort((a, b) => a - b); const n = nums.length; for (let i = 0; i < n - 1; i++) { if (nums[i] === nums[i + 1]) { return true; } } return false; };