第36题:最大非连续子序列

题目描述:
给你一个整数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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值