LC 速查

HOT 100索引 › B15 动态规划 Dynamic Programming

LC 152乘积最大子数组Maximum Product Subarray 中等

求乘积最大的非空连续子数组,返回该乘积(数组可能含负数和 0)。

思路 负数会翻转大小关系,同时维护以当前元素结尾的最大积与最小积,遇负数先交换二者。时间 O(n)。

class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        ans = fmax = fmin = nums[0]
        for x in nums[1:]:
            if x < 0:
                fmax, fmin = fmin, fmax
            fmax = max(fmax * x, x)
            fmin = min(fmin * x, x)
            ans = max(ans, fmax)
        return ans
← 上一题 最长递增子序列分割等和子集 下一题 →