Arrays 查找其子数组';s first&;最后的值相等

Arrays 查找其子数组';s first&;最后的值相等,arrays,algorithm,data-structures,Arrays,Algorithm,Data Structures,有人问我这个问题,我只能用暴力手段 Example - [1 9 -2 9 4 2 4] Ans - [9 -2 9] = 16 Example - [9 -18 9 2 9] Ans - 9+2+9 = 20 Example - [5,1,4,1,10,1,7] Ans - 1+4+1+10+1 = 17 我们可以使用Kadane算法,但我们需要添加子数组和,而不是单个值。我们可以记录每个值的最佳起始索引。Python代码: def(A): #前缀和 ps=[0]*(len(A)+1)

有人问我这个问题,我只能用暴力手段

Example - [1 9 -2 9 4 2 4]
Ans - [9 -2 9] = 16

Example - [9 -18 9 2 9]
Ans - 9+2+9 = 20

Example - [5,1,4,1,10,1,7]
Ans - 1+4+1+10+1 = 17

我们可以使用Kadane算法,但我们需要添加子数组和,而不是单个值。我们可以记录每个值的最佳起始索引。Python代码:

def(A):
#前缀和
ps=[0]*(len(A)+1)
对于范围内的i(len(A)):
ps[i]=A[i]+ps[i-1]
#价值地图
#最佳起始指数。
h={}
#最佳总和
最佳和=0
对于范围内的i(len(A)):
#我们通过保持不变来延长间隔
#起始指数;否则,请重置启动开关
#索引。

如果(不是h中的A[i]或(ps[i]-ps[h[A[i]]-1]是你的蛮力方法O(n^3)?如果是这样,可以通过维护前缀和数组轻松地将其缩减为O(n^2)。前缀和数组需要O(n)进行预计算,但这将帮助你找到O(1)中任意两个索引之间的和。前缀和数组的另一种选择是,在添加或删除索引时,只需维护一个变量来跟踪和。@Cherubim I解决了O(n^2)中的蛮力方法