从数组中查找每对整数的绝对差的乘积

时间:2020-03-03 16:24:31

标签: algorithm

给出一个数组,找到每对整数的绝对差的乘积。

例如:给定 a [] = {2,3,5,7};

输出应为(3-2)*(5-2)*(7-2​​)*(5-3)*(7-3)*(7-5)= 240

它能比O(n ^ 2)更好吗? 编辑: 所有元素都是不同的。

1 个答案:

答案 0 :(得分:0)

如果您必须计算绝对差之和,那么这将是您的解决方案

基本上,如果您输入任意数字,我们将其命名为x,那么就拥有它

m * x-n * x,

其中,m是小于x的项目数,n是大于x的n个项目数。因此,如果由于某种原因您拥有一个已排序的数组,那么每个项目的索引将直接告诉您,如果数组中的每个项目都是唯一的,则有多少个较大或较小的项目。如果没有,那么您也可以确定较高和较低元素的数量。

因此,如果对数组进行排序,则计算结果将是线性的。如果使用完全排序,则对数组进行完全未排序的排序为n * log(n)。因此,复杂度是

O(n + n * log(n))=(n +1)log(n)

但是对于绝对差异的产品

您有以下形式的产品

(a1-b1)* ...(...)

由于您具有减法乘积,因此为了找到可用于优化的模式,您需要有关数据的更多信息。您输入的内容似乎包含质数。

的产品

(a1-b1)*(a2-b2)

a1a2-a1b2-b1a2 + b1b2

我不知道可以用于优化的任何模式,所以我认为这具有O(n ^ 2)复杂性。