【发布时间】:2020-03-30 17:27:02
【问题描述】:
我需要返回数组 N 的最大总和,跳过两个连续的值。 例如, N = [10, 30, 50, 60, 5, 60]。 输出:175,跳过两个第一个值 [10,30] = 40。
我写了这个:
def maxSum(array):
tempSum = sum(array)
totalSum=0
for i in range(len(array)):
prevSum = tempSum - sum(array[i:i+2])
if prevSum > totalSum:
totalSum = prevSum
有什么办法可以通过 Greedy、DAC 或动态程序来解决这个问题?
【问题讨论】:
-
您的解决方案是 O(N)(线性),所以我怀疑它是否可以改进;无论如何,求和肯定需要完整的迭代。
-
这个实现中有一个错误,因为
i的范围高达len(array)-1,所以你尝试的最后一个“对”实际上只是一个元素。
标签: python algorithm sum dynamic-programming divide-and-conquer