c++ - 如何在 C 或 C++ 的 O(n) 中删除数组中的重复元素?

标签 c++ c algorithm

是否有任何方法可以在 O(n) 的 C/C++ 中删除数组中的重复元素? 假设元素是 a[5]={1,2,2,3,4} 那么结果数组应该包含 {1,2,3,4} 该解决方案可以使用两个 for 循环来实现,但我相信那将是 O(n^2)。

最佳答案

当且仅当源数组已排序,这可以在线性时间内完成:

std::unique(a, a + 5); //Returns a pointer to the new logical end of a.

否则你必须先排序,这是(99.999% 的时间)n lg n

关于c++ - 如何在 C 或 C++ 的 O(n) 中删除数组中的重复元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3432760/

相关文章:

c++ - C++ 中的二维 vector

c++ - 什么容器来存储唯一值?

c - 在 C 中的函数之间共享数据值

c - 以二维数组显示矩阵

c++ - 我如何使用 void** 函数 (void**)

performance - 当我选择中位数或模式等枢轴时,快速排序的速度并不快

c++ - 异常处理迭代器接口(interface)

c++ - 使用字符串键初始化结构映射

c - 高效分拣

c# - 使用 LINQ to XML 使用文本和元素节点展平 xml