#刷题交流# 我们需要维护两个动态规划数组,dp_max[i]:表示以 arr[i] 结尾的子数组的最大乘积。
dp_min[i]:表示以 arr[i] 结尾的子数组的最小乘积。对于 arr[i],它可以与前一个元素的乘积继续相乘,形成一个新的最大值或最小值。因此我们要考虑以下三种情况:
arr[i] 自身就是一个新的子数组。
dp_max[i-1] * arr[i],即之前的最大乘积乘上当前元素。
dp_min[i-1] * arr[i],即之前的最小乘积乘上当前元素。
通过动态更新这些状态,我们可以在 O(n) 时间内求解出最大乘积区间。