存在重复元素
一、LeetCode题解
瞧一瞧~
- 博健的LeetCode题解:Gitbook版本传送门
- 博健的LeetCode题解:CSDN传送门
- 前端进阶笔记:Gitbook传送门
二、算法题
题目
给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
输入 | 输出 |
---|---|
[1,2,3,1] | true |
[1,2,3,4] | false |
[1,1,1,3,3,4,3,2,4,2] | true |
解法一(线性查找)
时间负责度:O(n^2)
空间复杂度:O(1)
此思路在leetcode不会通过,会超时
function containsDuplicate(nums) {
for (let i = 0; i < nums.length; ++i) {
for (let j = 0; j < i; ++j) {
if (nums[j] == nums[i]) return true;
}
}
return false;
}
解法一的变式
仅仅是实现了,但比解法一还耗费时间和内存
var containsDuplicate = function(nums) {
var res = true
var len = nums.length
var arr = []
if(len === 0 || len === 1){
return false
}
for(let i = 0; i < nums.length; i++){
arr = nums.slice(i+1)
if(arr.indexOf(nums[i]) != -1){
return true
}
}
return false
};
解法二(排序)
排序之后,如果存在重复的元素,那么他们一定相邻
var containsDuplicate = function(nums) {
nums = nums.sort((a, b)=>{
return a-b
})
for(let i = 0; i < nums.length; i++){
if(nums[i] == nums[i+1]){
return true
}
}
return false
};
解法三(hash)
思路
- 每个元素只存一次,一旦存过,再次遇到就会返回false
代码
var containsDuplicate = function(nums) {
var hash = {}
for(let i = 0; i < nums.length; i++){
if(hash[nums[i]]){
return true
}else{
hash[nums[i]] = 1
}
}
return false
};
结果
解法四(new Set结构)
var containsDuplicate = function(nums) {
return !(new Set(nums).size === nums.length)
};