LeetCode217-存在重复元素 | 算法练习系列

167 阅读2分钟

这是我参与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!!!