Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
菜鸟就要从第10题继续
一、题目描述:
给你一个整数数组
nums。如果任一值在数组中出现 至少两次 ,返回true;如果数组中每个元素互不相同,返回false。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/co… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
第一版:暴力求解,两层循环依次对比。时间复杂度高。
哈希,理论上我们只需要遍历一次就知道了所有的值,可以判断出是否存在重复值,而不需要两次循环。是否可以通过存入哈希表来减少一次遍历及查找时间?采用set进行储存,set.has()set.add()函数完成功能
参考答案针对第一版其实可以在遍历时进行排序,再对比相邻值就可以判断是否有重复元素,这样不必嵌套循环,也可以提升。注意排序的写法nums.sort((a, b) => a - b),js的sort方法传入的比较函数,若为负值,则a在b前,也就是从小到达排列。
三、AC 代码:
1、第一版
/**
* @param {number[]} nums
* @return {boolean}
*/
var containsDuplicate = function(nums) {
for(let i=0;i<nums.length-1;i++){
for(let j=i+1;j<nums.length;j++){
if(nums[i]==nums[j]) return true
}
}
return false
};
2、哈希表
/**
* @param {number[]} nums
* @return {boolean}
*/
var containsDuplicate = function(nums) {
let setNew = new Set()
for(let i=0;i<nums.length;i++){
if(setNew.has(nums[i])) {
return true
}
else{
setNew.add(nums[i])
}
}
return false
};
3、排序
/**
* @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;
};