最大子数组和

"""
力扣53. 最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。
"""


def max_sub_array(nums):
    '''
    暴力解法
    第二层在第一层的基础上循环
    :param nums:
    :return:
    '''
    n = len(nums)
    result = nums[0]
    for i in range(n):
        _sum = 0
        for j in range(i, n):
            _sum += nums[j]
            result = max(result, _sum)

    return result


def max_sub_array1(nums):
    '''
    动态规划
    :param nums:
    :return:
    '''
    n = len(nums)
    pre = 0
    res = nums[0]
    for i in range(n):
        pre = max(nums[i], pre + nums[i])
        res = max(pre, res)
    return res


def max_sub_array2(nums):
    '''
    贪婪算法,顺便找出子数组位置
    :param nums:
    :return:
    '''
    start = 0
    end = 0
    res = nums[0]
    pre = 0
    for i, value in enumerate(nums):
        pre += value
        if pre >= res:
            res = pre
            end = i
        if pre < 0:
            pre = 0
            start = i + 1

    return nums[start:end + 1], sum(nums[start:end + 1])

posted @ 2022-05-27 17:57  倒骑驴子  阅读(37)  评论(0编辑  收藏  举报