简单的dp,需要注意考虑0以及只有一个负数的情况
class Solution {
public int maxProduct(int[] nums) {
int len = nums.length;
// 以下标结尾的最大乘积
int[][] dp = new int[len][2];
if(nums[0] > 0) {
dp[0][0] = nums[0];
} else if(nums[0] < 0) {
dp[0][1] = nums[0];
}
int ans = nums[0];
for(int i = 1;i < len;i++) {
if(nums[i] > 0) {
dp[i][0] = dp[i - 1][0] == 0 ? nums[i] : dp[i - 1][0] * nums[i];
dp[i][1] = dp[i - 1][1] * nums[i];
} else if(nums[i] < 0) {
dp[i][1] = dp[i - 1][0] == 0 ? nums[i] : dp[i - 1][0] * nums[i];
dp[i][0] = dp[i - 1][1] * nums[i];
}
ans = Math.max(dp[i][0], ans);
}
return ans;
}
}