给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
示例 1:
输入: [1,2,3,1]
输出: true
示例 2:
输入: [1,2,3,4]
输出: false
1、我想到的最简单的应该是用set方式与原数组长度比较
var containsDuplicate = function(nums) {
let numSet = new Set(nums)
if(nums.length==numSet.size()){
return false
}else{
return true
}
};
时间复杂度:O(1)
空间复杂度:O(n),n为数组长度
2、排序方法,排序之后判断相邻元素是否相同
var containsDuplicate = function(nums) {
nums.sort((a,b)=>a-b)
console.log(nums)
for(let i=1;i<nums.length;i++){
if(nums[i]==nums[i-1]){
return true
}
}
return false
};
时间复杂度: O(N logN),其中 N为数组的长度。需要对数组进行排序。
空间复杂度:
O(log N),其中 N为数组的长度。注意我们在这里应当考虑递归调用栈的深度。
3、哈希表。遍历数组,当前数字存在哈希表中,返回即可。哈希表中不存在当前数字,则将该数字加入到哈希表中
var containsDuplicate = function(nums) {
const hx = new Set()
for(const i of nums){
if(hx.has(i)){
return true
}else{
hx.add(i)
}
}
return false
};
var containsDuplicate = function(nums) {
const hx = new Map()
for(const i of nums){
if(hx.has(i)){
return true
}else{
hx.set(i)
}
}
return false
};
时间复杂度:O(N),其中 N为数组的长度。
空间复杂度:O(N),其中 N为数组的长度。
网友评论