昨天看到一个讨论数组去重的文章,觉得代码可以再简洁一点。
普通解法
时间复杂度: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
}