Arrays 整数数组中每对的距离和最大值的乘积之和
给定一个未排序的整数数组及其值。 需要计算每对之间距离的乘积和它们之间的最大值 更清楚地说。 假设数组Arrays 整数数组中每对的距离和最大值的乘积之和,arrays,algorithm,data-structures,Arrays,Algorithm,Data Structures,给定一个未排序的整数数组及其值。 需要计算每对之间距离的乘积和它们之间的最大值 更清楚地说。 假设数组A[]包含n个元素 计算:- for all i & j (i<j) sum (distance(i,j)*(max(A[i],A[j]))) 对于所有i&j(i为了简单起见,我假设所有数字都是不同的 让我们从左到右迭代。让我们看看 A[i] < /代码>,并将所有右端的段添加到答案中。考虑所有 j。有两种可能的情况: a[j]a[i]。我们需要添加a[j]*(i-j+1) 让我
A[]包含n个元素
计算:-
for all i & j (i<j)
sum (distance(i,j)*(max(A[i],A[j])))
对于所有i&j(i为了简单起见,我假设所有数字都是不同的
让我们从左到右迭代。让我们看看<代码> A[i] < /代码>,并将所有右端的段添加到答案中。考虑所有<代码> j。有两种可能的情况:
a[j]
。我们需要在答案中添加a[i]*(i-j+1)
a[j]>a[i]
。我们需要添加a[j]*(i-j+1)
让我们重写这两个总和:第一个是
sum j
。注意,a[i]*(i+1)
和a[i]
与j
无关,所以它只是一个常数。我们只需要计算这样的j和
和它们的和有效。事实上,它是前缀上的和。平衡二元搜索树可以处理这个问题,但我们不需要它。我们可以压缩坐标并使用二元索引树。现在我们可以在O(N log N)
中计算这个和
你可以对第二个求和做类似的事情,得到一个O(N logn)
解。Bravo!我明白你的意思了。我在计算a[I]的答案时试图覆盖整个数组
。但前缀将更有效地解决此问题。我想我将使用AVL树。我认为计算较小/较大元素的数量和总和将很容易。谢谢!