javascript - 如何从元素中删除重复的部分元素而不偏向于稍后出现的元素

标签 javascript algorithm

我知道这是一个可怕的标题。我没有接受过 CS 方面的培训,所以我没有参加过算法类(class)来了解这可能是什么。

让我解释一下:

我有一个包含 6 个数字的数组:

 var theList = [{[1,2,3,4,5,6],[1,2,3,4,5,7],[1,2,3,4,6,7],[1,3,4,5,6,7]}];

这个数组可以很大。然后我遍历数组中的每个项目并计算其中三个不同组的出现次数。即 1 2 3 出现 3 次,2 3 4 出现 3 次,等等。我将此信息保存在另一个数组中,其计数显示为索引 3:

var countList = [{[1,2,3,3],[2,3,4,3]}]

我接下来要做的是遍历每组 6 个(来自 theList),然后检查我的 countList 以了解每组 3 个出现的次数。如果它们都大于 1,我将删除这组 6 个,减少 countList 中的计数并继续处理下一个数字。

这似乎行得通,但是剩下的数字包含来自数字较高端的大量三组。例如,如果数字是从 1 到 10,当计算完成时,较低的三组 ([1,2,3],[1,2,4][1,2,5]) 很少出现, 等但是有很多更高的三组 ([6,7,8], [7,8,9][8,9,10]) 所以我最终得到的是一堆六组从似乎从重复搜索中取出的低数字开始,但它们都以相同的几个高数字结束。

我的看法是,因为 countList 已排序并且六组列表 (theList) 已排序,所以它更频繁地“看到”那些较低的三组并删除它们,但是当它得到时对于较高的数字,较低的数字都已被删除,因此它们“必须”在那里。

有没有我可以研究的算法?

如果这让您感到困惑,我深表歉意,感谢您的帮助。

最佳答案

如您所述,由于 theList 已排序,因此您倾向于删除较低的运行而不是较高的运行。如果您想要对称性,那么一种方法是在开始删除阶段之前随机打乱 theList

随机改组 (Javascript) 数组是一个众所周知的问题。参见 this community Wiki question , 即用型答案。

关于javascript - 如何从元素中删除重复的部分元素而不偏向于稍后出现的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31103219/

相关文章:

javascript - CSS中的 Stripe 元素样式设置

javascript - HTML 表格解决方案通过增加表格宽度来限制行或单元格的最大高度,Javascript

javascript 对象变量作用域

c# - 最小和算法

arrays - 如何使我的 ruby​​ remove_duplicates(nums) 算法更高效

javascript - 如何在 mailgun 电子邮件模板(Node js)中分配变量?

javascript - Node.js - 如何控制异步回调序列?

algorithm - 快速计算 n! mod m 其中 m 是素数?

algorithm - 如何在 500,000 个点的 100 维空间中找到最近的 2 个点?

algorithm - KMeans 评估指标不收敛。这是正常行为还是不正常?