数组去重复要求杂度为O(n)如何实现(数组中有"1"和1)?
时间: 2024-03-10 20:50:26 浏览: 62
若要求数组去重的时间复杂度为O(n),可以使用哈希表的方式来实现,具体步骤如下:
1. 创建一个空对象作为哈希表;
2. 遍历数组中的每个元素,将元素值作为哈希表的键名,将元素值作为键值存储;
3. 使用Object.keys()方法获取哈希表中所有键名构成的数组,即为去重后的数组。
需要注意的是,由于JavaScript中数字1和字符串"1"是不同的类型,因此需要对数据类型进行判断,例如可以使用typeof运算符来判断元素的类型,可以使用下面的代码来实现:
```
function unique(arr) {
let hash = {};
let result = [];
for (let i = 0; i < arr.length; i++) {
let key = typeof(arr[i]) + arr[i];
if (!hash[key]) {
hash[key] = true;
result.push(arr[i]);
}
}
return result;
}
```
这段代码中,将元素值的类型和值拼接起来作为哈希表的键名,例如数字1的键名为"number1",字符串"1"的键名为"string1",这样就可以避免数字1和字符串"1"被认为是同一个元素。
阅读全文