【问题标题】:How to delete all elements from list A which are also in list B?如何从列表 A 中删除列表 B 中的所有元素?
【发布时间】:2016-02-13 02:30:53
【问题描述】:

我正在寻找 C 的 removeAll 等效项。

我会用一个简单的例子来澄清我的问题。

我有一个元素类型的结构列表。

Element** list1 = {A, B, C, D, E F}

还有第二个列表

Element** list2 = {B, E}

现在我想删除 list1 中也包含在 list2 中的所有元素。 我还希望重新分配我的 list1。

结果列表包含元素 {A, C, D, F}。

使用的数据结构必须是一个数组,因为我想快速查找索引上的元素。

我自己开发了一个解决方案。不幸的是,我需要太多循环。

【问题讨论】:

  • 你知道如何从列表中删除吗?所以你循环到list2 并要求从list1 中删除元素。
  • 请给出一个更完整的代码示例来说明A, B, .. 的含义,以及为什么使用双重**“我自己开发了一个解决方案” 问题是“循环太多”还是不起作用?请发布一些正确的代码来证明您的问题。

标签: c arrays removeall


【解决方案1】:

我可以给你 n*log(n) 的解决方案,但这需要对象是可排序的。

  1. 对两个对象列表进行排序。 //n*log(n)
  2. 遍历列表B,如果列表A中存在元素B[i],则将其删除,这可以在一个循环中完成。
  3. 如果要保持列表A的原始顺序,需要直接从原始列表A中删除匹配的项目。

【讨论】:

  • 列表A的顺序确实不能乱。在第 2 步中,我假设您随时移动剩余元素并在最后重新分配一次?
猜你喜欢
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 2021-03-10
  • 2016-08-16
相关资源
最近更新 更多