分治算法--连续子列表最大和

本文探讨如何利用分治策略解决在包含正负数的列表中找到连续子列表最大和的问题。解题思路涉及比较左子列表、右子列表以及两者之间的子列表的最大和。
摘要由CSDN通过智能技术生成

特点:子列表不为空,一个列表中找到连续子列表的最大和,列表数字可负可正

解题思路

最大子列表有可能在左子列表、右子列表、左子列表和右子列表之间。我们需要找到子列表的最大值列表的和、右子列表的最大子列表之和、左子列表和右子列表之间的子列表最大和,在进行比较

"""
连续子列表的最大和解题思路: 一个列表  使用分治算法的时候  递归形式下  将列表分为两个子列表
【32, 43, 54, 12, 32, 31, 2, 4, 2】AA  --> 32 43 54 12 (A),    32 31 2 4 2(B)
最大和 是从  (AA的和, A的和, B的和)  取出最大的一个和



# 现在需要做的是找到第三种可能,也就是左子列表与右子列表之间的子列表的最大和。设一个中点,遍历中点左边的值,跟踪记录已经遍历过的值的总和,取这些总和的最大值;同样的方法遍历中点右边的值。最后,左边的最大值加上右边的最大值加上中点值就是想要的值
"""


def sum_max(ali):
    if ali == []:       # 空列表直接返回   1位元素 直接返回1位元素
        return
    if len(ali) == 1:
        return ali[0]
    n = len(ali) // 2       # 设置中点
    left = sum_max(ali[:n])     # 分治  中点左边部分   找到左边列表的最大和
    right = sum_max(ali[n:])    # 分治  中点右边部分   找到右边列表的最大和
    lms = 0   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值