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