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排序方法,则在排序后再循环对比也是可以得到结果。
\