在小于1e5的不同整数数组中查找所有成对差异

问题描述

给出一个由不同的正整数组成的数组,≤10 5 ,我需要找到所有对的差。

我真的不需要计算每个差异的发生频率,只需计算唯一的差异即可。

使用蛮力,可以通过检查所有可能的配对来解决。但是,考虑到数组的大小,这将不够高效(因为所有元素都是不同的,因此最大大小为 10 5 )。这会导致 O(n 2 复杂。

我需要利用此数组的属性,即差异≤10 5

所以我的另一种方法

  • 可以使用另一个哈希数组表示数组元素,其中表示数组元素的索引将为1,其余索引为0。
  • 此哈希数组表示为一个多项式,所有系数均为1,指数为各自的哈希值。
  • 现在克隆此多项式,并用负的指数制作另一个多项式。 如果现在将这些多项式相乘,结果中的所有正指数将对应所需的差。

但是我不确定如何有效地实现这种乘法。我认为可以使用 FFT ,因为它有助于以 O(n log n)的复杂度将两个多项式相乘。但这需要正指数。

请提供有关如何立即进行操作的建议?

我还遇到了this算法,该算法使用 FFT 查找 O(n log n)中的成对差异,但是我不知道如何该算法正在运行。似乎正在尝试找到all possible sums

对此算法的证明将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)