Skip to content

3. 数组去重

来源:腾讯一面

题目

实现数组去重,要求掌握多种方法。

代码

js
// 数组去重,多种方法
// 腾讯一面

const arr = [1, 2, 3, 3, 4, 4, 5]

// 1. Set
let uniqueArr1 = [...new Set(arr)];
console.log(uniqueArr1);

// 2. includes
let uniqueArr2 = [];
for(const num of arr){
    if(!uniqueArr2.includes(num)){
        uniqueArr2.push(num);
    }
}
console.log(uniqueArr2);

// 3. filter + indexOf
let uniqueArr3 = arr.filter((num,index) => arr.indexOf(num) === index);
console.log(uniqueArr3);

// 4. Map
const map = new Map();
for(const num of arr){
    map.set(num, 1);
}
let uniqueArr4 = [...map.keys()];
console.log(uniqueArr4);

思路

方法一:Set

利用 Set 自动去重的特性,最简洁高效。

  • 时间复杂度 O(n)
  • 空间复杂度 O(n)

方法二:includes

遍历数组,使用 includes 判断元素是否已存在于结果数组中。

  • 时间复杂度 O(n2)(includes 本身是 O(n)
  • 空间复杂度 O(n)

方法三:filter + indexOf

使用 filter 过滤,保留首次出现的元素(indexOf 返回首次出现的索引)。

  • 时间复杂度 O(n2)
  • 空间复杂度 O(n)

方法四:Map

使用 Map 存储元素,利用 Map 的 key 唯一性去重。

  • 时间复杂度 O(n)
  • 空间复杂度 O(n)

关键点

  • Set 和 Map 方法性能最优,时间复杂度 O(n)
  • includes 和 indexOf 方法需要嵌套遍历,时间复杂度 O(n2)
  • 实际开发中推荐使用 Set 方法