DP. Space = O(n)
class Solution {
public int maxProduct(int[] nums) {
int[] maxProduct = new int[nums.length];
int[] minProduct = new int[nums.length];
maxProduct[0] = nums[0];
minProduct[0] = nums[0];
int maxProductNum = nums[0];
for (int i = 1; i < nums.length; i++) {
maxProduct[i] = Math.max(Math.max(maxProduct[i - 1] * nums[i],
minProduct[i - 1] * nums[i]), nums[i]);
maxProductNum = Math.max(maxProductNum, maxProduct[i]);
minProduct[i] = Math.min(Math.min(maxProduct[i - 1] * nums[i],
minProduct[i - 1] * nums[i]), nums[i]);
}
return maxProductNum;
}
}
Optimize space to O(1):
class Solution {
public int maxProduct(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int maxProductPre = nums[0];
int minProductPre = nums[0];
int max = nums[0];
int maxProduct;
int minProduct;
for (int i = 1; i < nums.length; i++) {
maxProduct = Math.max(nums[i], Math.max(nums[i] * maxProductPre, nums[i] * minProductPre));
minProduct = Math.min(nums[i], Math.min(nums[i] * maxProductPre, nums[i] * minProductPre));
max = Math.max(max, maxProduct);
maxProductPre = maxProduct;
minProductPre = minProduct;
}
return max;
}
}