152. 乘积最大子数组 - 力扣(LeetCode) (leetcode-cn.com)
class Solution {
/*
* 思路: 求最大值,可以看成求被0拆分的各个子数组的最大值。
当一个数组中没有0存在,则分为两种情况:
1.负数为偶数个,则整个数组的各个值相乘为最大值;
2.负数为奇数个,则从左边开始,乘到最后一个负数停止有一个“最大值”,从右边也有一个“最大值”,比较,得出最大值。
* */
public int maxProduct(int[] nums) {
int a = 1;
int max = nums[0];
//从左边开始
for(int num:nums){
a = a*num;
if(max<a) max = a;
//如果数组出现0,拆分数组
if(num==0) a=1;
}
a = 1;
for(int i=nums.length-1;i>=0;i--){
a = a*nums[i];
if(max<a) max = a;
if(nums[i]==0) a=1;
}
return max;
}
}