【初级算法|数组】04-存在重复元素

56 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

问题

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false

分析

第一种解决方案:暴力解决,每个数组都值都和剩余的值做循环遍历比较。

这种方式要多次循环对比,这种方式解题会影响性能。

第二种解决方案:使用 set 无重复的数组

因为我使用的是 javascript 解决,所以想到是可以使用set 。仅需将当前的数组转换成无重复的数组来解决,再来对比2个数组之间的长度,如果还是一样的说明是没有重复的值,如果长度不一致说明存在重复的元素。

第三种解决方案:排序后再对元素前后对比

js 中提高了sort() 方法,可以对数组直接排序后,排序后的数组,每个元素和后一位相比较,相等就是存在重复的,然后终止对比,输出结果。

AC 代码

// 使用 set 执行
function func_exerise1(nums) {
    let data = [...new Set(nums)]
    return !data.length === data.length;
}
​
// 使用key-value来比较
var containsDuplicate = function(nums) {
    let isExist = false;
    let data={};
    nums.forEach(n=>{
         if(data[n]){
            isExist = true
        }else{
            data[n]=true
        }
    })
    return isExist;
};

总结

这题是简单的题型,可能一开始想到的就是暴力解决,也是最简单的方式,在考虑性能基础上,再借助语言的一些特性来解决,比如使用无重复的数组 set 来解决。在 js 中提供 sort排序方法,则在排序后再循环对比也是可以得到结果。

\