问题:
给定n个数字,...,考虑对所有<=计算[,] = ++⋯的问题。通过独立计算每个[,]的幼稚算法将花费(^)时间。得出一种在(^)时间内解决此问题的有效方法。
我试图绘制一个二维表,其中行和列均为1〜n,并找到一些公式来填充所有表(上三角)。但是我认为每个块都是不规则的,也许这不是一个好主意。有什么主意吗谢谢。
答案 0 :(得分:2)
答案 1 :(得分:0)
虽然不需要O(n ^ 2)内存。您可以使用所谓的前缀和。创建一个数组'prefsum [n]',对于(1 ... n)中的每个i,prefsum [i] = x1 + x2 + ... + xi。如果要获得范围(l,r)中的和,只需取prefsum [r]-prefsum [1-1](显然,如果l-1> 0,否则结果是prefsum [r])。这样,您可以在O(n)(循环简单)中计算prefsum,并获得O(1)中任意范围的结果。由于存在O(n ^ 2)个不同的范围,因此您的复杂度为O(n ^ 2)。