题目描述:
给你一个整数list L, 如 L=[2,-3,3,50], 求L的一个非连续子序列,使其和最大,输出最大子序列的和。 这里非连续子序列的定义是,子序列中任意相邻的两个数在原序列里都不相邻。 例如,对于L=[2,-3,3,50], 输出52(分析:很明显,该列表最大非连续子序列为[2,50]).
示例:
输入: L = [2, -3, 3, 50]
输出: 52
思路:先插入L[0]=0为基准,从第三个数字左向右扫描,把每个数都更新为加上其上一个数之前的最大值。
如L = [2, -3, 3, 50],插入得到L = [0, 2, -3, 3, 50]。
-3变成-3+(2之前的最大值=0)=-3,L = [0, 2, -3, 3, 50]
3变成3+(-3之前的最大值=2)=5,L = [0, 2, -3, 5, 50]
50变成50+(5之前的最大值=2)=52,L = [0, 2, -3, 5, 52]
最后输出L的最大值即可。
L.insert(0, 0)
for i in range(2,len(L)):
L[i] += max(L[:i - 1])
print(max(L))