1. 程式人生 > 遊戲 >《刀劍亂舞無雙》Steam版正式發售 普通版售價349元

《刀劍亂舞無雙》Steam版正式發售 普通版售價349元

"""
力扣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])