[英]Find maximum contiguous subarray sum whose subarray's first & last values are equal
我被问到这个问题,只能想出蛮力的方法
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 f(A):
# Prefix sums
ps = [0] * (len(A) + 1)
for i in range(len(A)):
ps[i] = A[i] + ps[i-1]
# Map of value to its
# best starting index.
h = {}
# Best overall sum
best_sum = 0
for i in range(len(A)):
# We extend the interval by keeping the same
# starting index; Otherwise, reset the starting
# index.
if (not A[i] in h) or (ps[i] - ps[h[A[i]] - 1] <= 0):
h[A[i]] = i
candidate = ps[i] - ps[h[A[i]] - 1] if i != h[A[i]] else 0
best_sum = max(best_sum, candidate)
return best_sum
As = [
[1, 9, -2, 9, 4, 2, 4], # 16
[9, -18, 9, 2, 9], # 20
[5, 1, 4, 1, 10, 1, 7], # 17
[1, 2, 3] # 0
]
for A in As:
print(A)
print(f(A))
print('')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.