Algorithm 是否有可能在O(n)时间内获得所有相邻子阵列的总和?
作为我正在解决的一个更大问题的一部分,我很好奇在线性时间内是否有可能Algorithm 是否有可能在O(n)时间内获得所有相邻子阵列的总和?,algorithm,data-structures,time-complexity,Algorithm,Data Structures,Time Complexity,作为我正在解决的一个更大问题的一部分,我很好奇在线性时间内是否有可能 {a_0, a_1, ..., a_n-1} 生成映射的步骤 f(i,j): sum of elements over range [i,j) for all i,j in {0, 1, ..., n - 1} e、 g 虽然不能在线性时间内生成O(n2)个数量的数据,但可以在线性时间内构建一个数据结构,让您计算O(1)中的f(x,y) 为此,您需要构建一个数组s,使si表示从零到i的a之和,包括两端 您可以通过将s[0]
{a_0, a_1, ..., a_n-1}
生成映射的步骤
f(i,j): sum of elements over range [i,j) for all i,j in {0, 1, ..., n - 1}
e、 g
虽然不能在线性时间内生成O(n2)个数量的数据,但可以在线性时间内构建一个数据结构,让您计算O(1)中的
f(x,y)
为此,您需要构建一个数组s
,使si表示从零到i
的a
之和,包括两端
您可以通过将s[0]=a[0]
设置,然后将s[i]=s[i-1]+a[i]
设置为高于零的每个i
来构建部分和数组
使用部分和数组可以计算
f(x,y) = s[y] - (x==0 ? 0 : s[x-1])
这可以在没有任何辅助数据结构的情况下完成。@A.Mashreghi这在很大程度上取决于您所说的“这”是什么意思。
f(x,y) = s[y] - (x==0 ? 0 : s[x-1])