【leetcode系列】【算法】【中等】乘积最大子数组

题目:

【leetcode系列】【算法】【中等】乘积最大子数组_第1张图片

题目链接:https://leetcode-cn.com/problems/maximum-product-subarray/

 

解题思路:

动态规划,状态转移公式为:

dp[i] = max(dp[i - 1] \times nums[i], nums[i])

需要注意的一点是,因为有负数的存在,所以在每一位需要保存最大和最小的两个值,用于下一位的计算

 

代码实现:

class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        min_ans = max_ans = ans = nums[0]
        for idx in range(1, len(nums)):
            val_lst = [max_ans * nums[idx], nums[idx], min_ans * nums[idx]]            
            max_ans, min_ans = max(val_lst), min(val_lst)
            ans = max(max_ans, ans)

        return ans

 

你可能感兴趣的:(leetcode系列)