#!/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)
【LeetCode】152.乘积最大子序列
猜你喜欢
转载自blog.csdn.net/qq_30159015/article/details/88606352
今日推荐
周排行