如何有效地收集给定数组中的重复元素?
How to efficiently gather the repeating elements in a given array?
我想在给定的数组中收集重复项。例如,我有一个这样的数组:
{1,5,3,1,5,6,3}
我希望结果是:
{3,3,1,1,5,5,6}
就我而言,在计算之前不知道集群的数量,并且不关心顺序。
我通过使用 bult-in 函数Sortin C++ 来实现这一点。但是,实际上不需要排序。因此,我想可能有更有效的方法来完成它。
提前谢谢。
首先,构建一个直方图,记录每个数字的频率。您可以使用字典在 O(n( 时间和空间内完成此操作。
接下来,遍历字典的键(顺序在这里并不重要(,并为每个键写入多个等于相应值的键实例。
例:
{1,5,3,1,5,6,3} input
{1->2,5->2,3->2,6->1} histogram dictionary
{1,1,5,5,3,3,6} wrote two 1s, two 5s, two 3s, then one 6
这整个事情是O(n(时间和空间。当然,你不能比O(n(时间做得更好。在保持O(n(时间的同时,你是否能比O(n(空间做得更好,我不能说。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀