这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战
前言
今天又到了一年一度的光棍节,感觉今年的双十一不是很热闹啊,都没听到周围的人讨论要买什么东西,今天来一道简单的算法题,判断我们的购物车是否有重复的物品呢,下面看题目
题目描述
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
示例 1:
输入: [1,2,3,1]
输出: true
示例 2:
输入: [1,2,3,4]
输出: false
示例 3:
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true
解题思路
- 首先通过题干可以得知,要判断的是数组中是否有重复的项,那我们就要对每一项进行判断,但要注意的一点是,其实我们不需要判断每一项,当我们发现有重复的值的时候就可以结束我们的操作了,这样会节省很多资源
- 这道题可以通过两个方法解决,首先我们比较熟悉的,我们可以首先把数组排序,排序之后的数组如果有重复的值那它们一定是在相邻的位置,这是我们只要通过for循环遍历数组,判断相邻值是否相等即可
- 而第二种方法就是声明一个map对象,然后遍历目标数组,如果map中不存在当前项就set进map对象,如果map中已经存在当前项,那么直接return true即可
- 这两种方法都可以解决这个问题,在这里我就只把使用map的代码贴出来了,代码如下
/**
* @param {number[]} nums
* @return {boolean}
*/
var containsDuplicate = function(nums) {
let map = new Map()//声明一个map对象
const n = nums.length
for(let i=0;i<n;i++){
if(map.has(nums[i])){//判断map中是否已经存在nums[i]
return true
}else{
map.set(nums[i])
}
}
return false//若果循环了整个数组走到了这一步,那就说明没有重复项,直接返回false即可
};
总结
这道题目其实非常简单,有很多方法可以解决这个问题,至于为什么我要用map对象呢,一是map对象不常用,而是因为map的特性在很多方面是很有用的,比如map的键不能重复,我们可以用来给数组去重等等。总之我们遇到问题时要多方面看问题,持续输出,gogogo!!!