昨天看到一個討論數組去重的文章,覺得代碼可以再簡潔一點。
普通解法
時間復雜度:O(n^2)
function unique(arr){
return arr.reduce((ret, cur)=> {
if (ret.includes(cur)) {
return ret
} else {
ret.push(cur)
return ret
}
}, [])
}
高效解法
把object對象看作hashTable的話,那么這個算法時間復雜度:O(n),但是空間復雜度為O(n)
// 沒有處理字符與數字的重復性
function unique(arr){
var dict = {}
var ret = []
arr.forEach((val) => {
val in dict ? null : dict[val] = ret.push(val)
})
return ret
}