Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 整数数组中每对的距离和最大值的乘积之和_Arrays_Algorithm_Data Structures - Fatal编程技术网

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树。我认为计算较小/较大元素的数量和总和将很容易。谢谢!