针对给定的数字列表,要求在时间复杂度为 o(n)、空间复杂度为 o(1) 的前提下找出非相邻元素的最大和,我可以使用以下方法:
sum1= 0
sum2= list[0]
for i in range(1, len(list)):
num= sum1
sum1= sum2+ list[i]
sum2= max(num, sum2)
print(max(sum2, sum1))
此代码仅在k = 1时有效[求和数字之间仅有一个元素]。如何通过使用动态规划改变k值来改进它?其中k是求和数字之间的元素数。例如:
列表= [5,6,4,1,2] k=1 答案= 11 #5+4+2
列表= [5,6,4,1,2] k=2 答案= 8 #6+2
列表= [5,3,4,10,2] k=1 答案= 15 #5+10