152. 乘积最大子序列

分析

这个题目和普通的一维DP, 二维DP都不一样.
不一样的地方, 它维护使用了两个角度的信息.

  1. max_dp[i]
  2. min_dp[i]

注意这个题目中0的作用很重要.

        for i in range(1,n):
          t_max = max_dp[i-1]*nums[i]
          t_min = min_dp[i-1]*nums[i]
          
          max_dp[i] = max(t_max, t_min, nums[i])
          min_dp[i] = min(t_max, t_min, nums[i])
          max_ret = max(max_ret, max_dp[i])

注意代码, 一旦出现了0, 也就是nums[i]==0, 那么相当于以后的

  1. max_dp[i] = {0}
  2. min_dp[i]={0}

DP 状态


class Solution(object):
    def maxProduct(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        
        n = len(nums)
        # max_dp[i]表示前i个数字, 包括i本身, 最大乘积
        max_dp = [0]*n
        # min_dp[i] 表示前i个数字,包括i本身, 最小的乘积
        min_dp = [0]*n
        
        # 初始化,最起码有一个结果
        max_dp[0] = nums[0]
        min_dp[0] = nums[0]
        max_ret = nums[0]
        
        for i in range(1,n):
          t_max = max_dp[i-1]*nums[i]
          t_min = min_dp[i-1]*nums[i]
          
          max_dp[i] = max(t_max, t_min, nums[i])
          min_dp[i] = min(t_max, t_min, nums[i])
          max_ret = max(max_ret, max_dp[i])
          
        return max_ret
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本题考察的是动态规划 题目描述 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一...
    小怪兽大作战阅读 705评论 0 1
  • 描述:给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: 输入...
    大数据Zone阅读 980评论 0 1
  • 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: 示例 2: 代码
    vbuer阅读 527评论 0 0
  • 刻意练习不仅仅对音乐、象棋、运动等领域培养杰出人才有重要作用,在日常生活、学生教育上也起作用。对学生教育关键是心理...
    颖小白阅读 510评论 0 0
  • 有时候就是那样的一瞬间我会感到非常的孤独和悲伤。有时候我就像是一个孤独的等待者,我在等待一个不确定的未来。因为等待...
    旅人未安阅读 168评论 0 0

友情链接更多精彩内容