【问题标题】:Calculate difference between two sorted arrays计算两个排序数组之间的差异
【发布时间】:2015-06-30 18:59:56
【问题描述】:

试图找到一种有效的算法来找出两个排序数组之间的差异,而其中一个数组始终是另一个数组的子集。

例如,我们可以有两个排序数组

  • [1,2,3,4]
  • [1,3,4]

第二个数组是第一个数组的子集。


潜在的解决方案: 我能想到的最有效的算法是同时遍历数组并比较元素,因为它们已排序。另一个优化是创建两个数组之间长度差异的计数器,如果我们遇到的不同元素的数量等于我们前面计算的差异,则算法可以在该点停止。

也许这是最有效的算法,但我想听听你们的意见。

【问题讨论】:

  • 线性时间是您可以渐近期望的最佳时间。似乎您的第一种方法是合理的。第二个没看懂。
  • 第一种方法很简单;第二个是最有效的,因为它缩短了第一个。无论如何,这都是线性时间。由于您可能在排序上花费了更多时间,因此不必担心这一步 :)
  • 第二种方法与第一种方法一样糟糕,因为找到两个数组的大小基本上意味着您(或库函数)已经以线性方式计算了元素。

标签: arrays algorithm sorting


【解决方案1】:

这取决于子集中缺失元素的数量。

例如。如果恰好缺少一个数字,您可以对丢失的数字进行二分法搜索。复杂度大约为 O(log(n))。与线性搜索 (O(n)) 相比,这更有效。

一般来说,如果 k 个数字丢失,您可能会在 O(klogn) 时间内找到它们。所以只要k很小,这就是有效的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多