python算法总结(二):python实现最大子数组和(动态规划法)

一、动态规划法求最大字段和

1、基本思路

            设数组为listd[],设maxsum[i]为以listd[i]结尾的子数组的最大和,对于元素listd[i + 1],只有两种选择:

          (1)listd[i + 1]接着前面的子数组构成最大和。

          (2)listd[i + 1]自己单独构成子数组。

            则,动态规划状态转移方程为maxsum[i + 1] = max{maxsum[i] + listd[i + 1],listd[i + 1]}。

2、for循环中要实现的逻辑:

          如果  (以前最大子数组 >= 0):

                   以前最大子数组和 + 当前数组元素  = 当前最大子数组和

          否则:

                 当前最大子数组和 =  当前数组元素

                 记录开始坐标

        如果 (最大和 < 当前最大子数组 ):

                最大和  =  当前最大子数组和

                记录结束坐标

3、代码实现

def sumd(listd):
    maxdata = 0
    sumdata = 0
    begin = 0
    right = 0
    for i in range(0, len(listd) - 1):
        if (sumdata >= 0):
            sumdata = sumdata + listd[i]
        else:
            sumdata = listd[i]
            begin = i
        if (maxdata < sumdata):
            maxdata = sumdata
            right = i
    print(maxdata)
    print(listd[begin:right])
sumd([-1, 2,3,-3,4,5,-6])

 

                   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值