给出一个数组,找到每对整数的绝对差的乘积。
例如:给定 a [] = {2,3,5,7};
输出应为(3-2)*(5-2)*(7-2)*(5-3)*(7-3)*(7-5)= 240
它能比O(n ^ 2)更好吗? 编辑: 所有元素都是不同的。
答案 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)复杂性。