給定一個(gè)整數(shù)數(shù)組,判斷是否存在重復(fù)元素。
如果存在一值在數(shù)組中出現(xiàn)至少兩次,函數(shù)返回 true 。如果數(shù)組中每個(gè)元素都不相同,則返回 false 。
示例 1:
輸入: [1,2,3,1]
輸出: true
示例 2:
輸入: [1,2,3,4]
輸出: false
1、我想到的最簡(jiǎn)單的應(yīng)該是用set方式與原數(shù)組長(zhǎng)度比較
var containsDuplicate = function(nums) {
let numSet = new Set(nums)
if(nums.length==numSet.size()){
return false
}else{
return true
}
};
時(shí)間復(fù)雜度:O(1)
空間復(fù)雜度:O(n),n為數(shù)組長(zhǎng)度
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
};
時(shí)間復(fù)雜度: O(N logN),其中 N為數(shù)組的長(zhǎng)度。需要對(duì)數(shù)組進(jìn)行排序。
空間復(fù)雜度:
O(log N),其中 N為數(shù)組的長(zhǎng)度。注意我們?cè)谶@里應(yīng)當(dāng)考慮遞歸調(diào)用棧的深度。
3、哈希表。遍歷數(shù)組,當(dāng)前數(shù)字存在哈希表中,返回即可。哈希表中不存在當(dāng)前數(shù)字,則將該數(shù)字加入到哈希表中
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
};
時(shí)間復(fù)雜度:O(N),其中 N為數(shù)組的長(zhǎng)度。
空間復(fù)雜度:O(N),其中 N為數(shù)組的長(zhǎng)度。