【发布时间】:2015-06-30 18:59:56
【问题描述】:
试图找到一种有效的算法来找出两个排序数组之间的差异,而其中一个数组始终是另一个数组的子集。
例如,我们可以有两个排序数组
- [1,2,3,4]
- [1,3,4]
第二个数组是第一个数组的子集。
潜在的解决方案: 我能想到的最有效的算法是同时遍历数组并比较元素,因为它们已排序。另一个优化是创建两个数组之间长度差异的计数器,如果我们遇到的不同元素的数量等于我们前面计算的差异,则算法可以在该点停止。
也许这是最有效的算法,但我想听听你们的意见。
【问题讨论】:
-
线性时间是您可以渐近期望的最佳时间。似乎您的第一种方法是合理的。第二个没看懂。
-
第一种方法很简单;第二个是最有效的,因为它缩短了第一个。无论如何,这都是线性时间。由于您可能在排序上花费了更多时间,因此不必担心这一步 :)
-
第二种方法与第一种方法一样糟糕,因为找到两个数组的大小基本上意味着您(或库函数)已经以线性方式计算了元素。