【LeetCode】152.乘积最大子序列

 
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time: 2019/3/16
# @Author: xfLi
# The file...

# 动态规划新手:https://www.cnblogs.com/mengfanrong/p/4008635.html

"""
问题分析:
动态规划思想,只要注意一点,就是考虑负数的情况(负负得正),dp方程式如下:
dpmax[i] = max(nums[i], dpmax[i - 1] * nums[i], dpmin[i - 1] * nums[i])  # 记录最大值
dpmin[i] = min(nums[i], dpmax[i - 1] * nums[i], dpmin[i - 1] * nums[i])  # 记录最小值,考虑负数的情况
"""
def maxProduct(nums):
    if len(nums) == 1:
        return nums[0]

    dpmax = [0] * len(nums)  # 初始化dp
    dpmin = [0] * len(nums)
    dpmax[0] = dpmin[0] = nums[0]

    for i in range(1, len(nums)):
        dpmax[i] = max(nums[i], dpmax[i -1] * nums[i], dpmin[i - 1] * nums[i])  # 记录最大值
        dpmin[i] = min(nums[i], dpmax[i -1] * nums[i], dpmin[i - 1] * nums[i])  # 记录最小值,考虑负数的情况
    return max(dpmax)

if __name__ == '__main__':
    nums = [2,3,-2,4]
    result = maxProduct(nums)
    print(result)

猜你喜欢

转载自blog.csdn.net/qq_30159015/article/details/88606352