Python 跳过两个连续整数的最大和

Python 跳过两个连续整数的最大和,python,algorithm,sum,dynamic-programming,divide-and-conquer,Python,Algorithm,Sum,Dynamic Programming,Divide And Conquer,我需要返回跳过两个连续值的数组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 =

我需要返回跳过两个连续值的数组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
有没有办法通过贪婪、DAC或动态编程来解决这个问题

这种方法是
O(n)
和贪婪的:

输出

175

zip(*(2*[iter(N)])
为您提供了一个无切片的成对步进迭代器。此外,这与OP发布的解决方案完全相同,尽管使用了更干净的代码。@MartijnPieters确实
zip(*(y:=iter(N),y))
也会这样做,但需要Python 3.8或更高版本。:-)@不,那将像
(1,2)、(3,4)、(5,6)
而不是
(1,2)、(2,3)、(3,4)、(4,5)、(5,6)
。你的解是O(N)(线性的),所以我怀疑它是否可以改进;求和当然需要完全的迭代。这个实现中有一个bug,因为
i
的范围最大为
len(array)-1
,所以您尝试的最后一个“对”实际上只是一个元素。
175