You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby如何移除数组中所有重复出现的元素?

最优实现方案:统计频率后筛选

好问题!要实现移除数组中所有重复元素(仅保留出现次数恰好为1的元素),最优的方式是先统计每个元素的出现频率,再基于频率筛选结果。这种方法的时间复杂度为O(n)(仅需两次线性遍历),空间复杂度为O(k)(k为数组中不同元素的数量),是效率最高的方案之一。

JavaScript 实现

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

// 第一步:用 reduce 统计每个元素的出现次数
const frequencyMap = arr.reduce((acc, num) => {
  acc[num] = (acc[num] || 0) + 1;
  return acc;
}, {});

// 第二步:筛选出仅出现一次的元素
const uniqueOnly = arr.filter(num => frequencyMap[num] === 1);

console.log(uniqueOnly); // 输出: [2, 3, 5]

Python 实现

如果你用Python,可以借助内置的Counter工具类简化统计过程:

from collections import Counter

arr = [1, 1, 2, 3, 4, 4, 5]
frequency = Counter(arr)
unique_only = [num for num in arr if frequency[num] == 1]

print(unique_only)  # 输出: [2, 3, 5]

为什么这是最优解?

  • 时间效率:两次线性遍历(统计+筛选),总时间复杂度O(n),远优于嵌套循环的O(n²)方案。
  • 空间效率:仅需存储不同元素的频率,对于大多数场景来说空间开销完全可控。

不推荐的方案(仅作对比)

如果你尝试用嵌套循环逐个检查元素是否重复,虽然不需要额外空间,但时间复杂度会飙升到O(n²),仅适合极小规模的数组:

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

for (let i = 0; i < arr.length; i++) {
  let isUnique = true;
  for (let j = 0; j < arr.length; j++) {
    if (i !== j && arr[i] === arr[j]) {
      isUnique = false;
      break;
    }
  }
  if (isUnique) uniqueOnly.push(arr[i]);
}

console.log(uniqueOnly); // 输出: [2, 3, 5]

内容的提问来源于stack exchange,提问作者endex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:16:16