【问题标题】:difference between two linked lists, O(N) [closed]两个链表之间的区别,O(N) [关闭]
【发布时间】:2014-08-23 15:55:35
【问题描述】:

我有两个具有唯一但相同元素的链表按打乱顺序排列。

然后从 list1 中删除随机元素。如何确定已删除的元素?

例子:

list1 0 3 7 8 1

list2 3 7 8 1 0

..删除..

list1 - 3 7 8 1

list2 3 7 8 1 0

答案:0

最重要的部分是我需要O(N)。

【问题讨论】:

  • 尝试一些代码。看看它怎么运作。如果不起作用,请返回一些相关问题。
  • @r-sahu 我知道如何分两步完成,但不会是 O(N)。这个问题很简单,但我只需要O(N)

标签: c++ algorithm linked-list big-o pseudocode


【解决方案1】:

将列表 1 中的元素填充到哈希集中。尝试将列表 2 中的每个元素填充到相同的哈希集中。如果它进入,那就是你的元素。

【讨论】:

  • 当然可以。向我解释它怎么可能不是,考虑到插入到哈希集中是O(1)
  • 最坏的情况,每次插入都是 O(n),对于一个完整的 O(n²) 上限。
  • 是的,我知道你要去哪里了。
  • @TrippKinetics 自何时哈希集保证 O(1) 性能?
  • @Slava:Tripp 可能意味着 O(1) 摊销预期性能。
【解决方案2】:

如果列表只包含数字(如您的示例),您可以取它们总和的差:

sum(list2) - sum(list1) 

【讨论】:

  • 为了使其更有效,只需将每个列表中的差异 btw 元素相加即可。这将保存一个变量:)
  • 是的!为什么我没有想到。
猜你喜欢
  • 2014-07-16
  • 2012-05-09
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 2014-05-07
  • 2010-11-24
  • 1970-01-01
  • 2011-09-06
相关资源
最近更新 更多