给你一个整数数组 ,请你找出数组中乘积最大的非空连续 子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
测试用例的答案是一个 -位 整数。
示例 1:
示例 2:
提示:
的任何子数组的乘积都 保证 是一个 -位 整数
方法一:暴力:
能过的样例数:
思路:第一层循环枚举子数组长度,第二层循环枚举子数组区间左边的索引,并且维护一个滑动窗口,用于记录窗口内的乘积值。
方法二:DP:
思路:维护三个数,res、imax、imin
- 遍历数组时维护当前子数组的最大值、最小值
- 当遇到负数时,最大值,最小值交换
- 当遇到0时,imax,imin 重置,在子数组内重新计算
注意:这里的子数组指的是 以 0 为分割的子数组
当乘给 负数 时,imin 与 imax 交换(最大,最小值交换)