开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的12天,点击查看活动详情
1 题目
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
示例 1:
输入: nums = [1,2,3,1]
输出: true
示例 2:
输入: nums = [1,2,3,4]
输出: false
示例 3:
输入: nums = [1,1,1,3,3,4,3,2,4,2]
输出: true
提示:
1 <= nums.length <= 105-109 <= nums[i] <= 109
2 个人解析
2.1 思路
根据题意,我们可以先filter遍历这个数组然后检测当前正在遍历的这个元素在这个数组中的位置下标是在哪里的,也就是用indexOf来检测。如果测当前的下标与当前正在遍历的这个位置是不符合的,那就说明这个元素在这个数组中不止只有他一个,至少有两个及两个以上,那就是false,反之如果全部都是等于当前的这个下标,那就是为true,true设置为默认值。
2.2 代码
/**
* @param {number[]} nums
* @return {boolean}
*/
var containsDuplicate = function(nums) {
let flag = false;
nums.filter((value,index)=>{
if(nums.indexOf(value)!==index){
flag = true;
}
})
return flag;
};
3 小结
这题不难,但是这种解法时间复杂比较高,同题库只击败了5%的选手(虽然空间复杂度降下来了,超过90%的选手)。
下面这里是借鉴一位大佬写的:
- 思路:先排序,然后循环数组,判断相邻元素是否相同
- 复杂度:时间复杂度O(nlogn),空间复杂度O(logn),排序需要的栈空间
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;
};
感谢看完:
- 博主个人前端网站:zhangqiang.hk.cn
- 欢迎加入博主的前端学习qq交流群::706947563,专注前端开发,共同学习进步啊 ~