给定一个数字列表来找到时间复杂度为 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))
Run Code Online (Sandbox Code Playgroud)
此代码仅在 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