gpt4 book ai didi

algorithm - 是否有可能在 O(n) 时间内得到所有连续子数组的总和?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:54 27 4
gpt4 key购买 nike

作为我正在解决的一个更大问题的一部分,我很好奇是否有可能在线性时间内

{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}

例如

{ 5, 1, 89, 0 }

---->

f(0,1) = 5
f(0,2) = 5 + 1 = 6
f(0,3) = 5 + 1 + 89 = 95
f(0,4) = 5 + 1 + 89 + 0 = 95
f(1,2) = 1
f(1,3) = 1 + 89 = 90
f(1,4) = 1 + 89 + 0 = 90
f(2,3) = 89
f(2,4) = 89 + 0 = 89
f(3,4) = 0

最佳答案

虽然您不能在线性时间内生成 O(n2) 数量的数据,但您可以在线性时间内构建一个数据结构,让您计算每个 f(x, y) 在 O(1) 中。

为此,您需要构建一个数组 s,这样 si 代表来自 a 的总和零到 i,包括两端。

您可以通过设置 s[0] = a[0] 然后设置 s[i] = s[i-1] + a[i 来构建部分和数组] 对于每个大于零的 i

有一个部分和数组可以让你计算

f(x,y) = s[y] - (x==0 ? 0 : s[x-1])

关于algorithm - 是否有可能在 O(n) 时间内得到所有连续子数组的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40311407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com