Python 跳过两个连续整数的最大和
我需要返回跳过两个连续值的数组N的最大和。 例如 N=[10,30,50,60,5,60]。 输出:175,跳过前两个值[10,30]=40 我写道: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 =
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