c - 在 O(n) 时间内从 C/C++ 中的数组中删除重复项

标签 c

<分区>

假设我有一个像

这样的数组
int array[] = {1,1,1,4,5,7,7,9,11};

我应该能够删除所有重复项,因此我的输出应该是 {1,4,5,7,9,11}。

约束:

  • 我不允许使用除变量之外的任何类型的额外内存
  • 我应该能够调整数组的大小
  • 我不允许使用 Hashset 或 set 等容器:
  • 应该在 O(n) 时间内完成

最佳答案

如果数组已排序,则可以应用此逻辑。

  1. 有两个指针(P1,P2)指向数组的开头。
  2. 递增指针P2。检查P2和P1指向的值是否相等。
  3. 如果是,则进一步增加并到达 P1 和 P2 指向值不相等的点。现在转到第 5 步。
  4. 如果不是,则将 P1 分配给 P2,然后从步骤 2 开始重复。
  5. 现在,删除 P1 和 P2 之间的元素。将 P2 分配给 P1。

重复该过程,直到到达数组的终点。

关于c - 在 O(n) 时间内从 C/C++ 中的数组中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7693540/

相关文章:

c - 函数和*函数有什么区别?

const char* 仍然修改指向的值

c - Raspberry Pi 客户端到 Mac 服务器错误

c - Gstreamer gst_event_new_seek 起止位置

python - python 与 C 中的递归开销

c++ - 引脚二进制检测 : How to precisely identify a function name.

c++ - 在项目中的不同文件之间共享结构

c - 如何在 C 中的用户定义函数中传递任意数量的参数?

c - 如何从另一个c文件中的void函数返回元素数组

c - 自定义drawRect()函数中是否存在错误或我的错误?