Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.
class Solution {
public int maxProduct(int[] nums) {
int[] max = new int[nums.length];
int[] min = new int[nums.length];
min[0] = max[0] = nums[0];
int result = nums[0];
for (int i = 1; i < nums.length; i++) {
min[i] = max[i] = nums[i];
if (nums[i] > 0) {
max[i] = Math.max(max[i], max[i - 1] * nums[i]);
min[i] = Math.min(min[i], min[i - 1] * nums[i]);
} else if (nums[i] < 0) {
max[i] = Math.max(max[i], min[i - 1] * nums[i]);
min[i] = Math.min(min[i], max[i - 1] * nums[i]);
}
result = Math.max(result, max[i]);
}
return result;
}
}
class Solution {
public int maxProduct(int[] nums) {
int[] max= new int[a.length];
int[] min = new int[a.length];
max[0]=a[0];
min[0]=a[0];
for(int i=1;i<a.length;i++){
max[i]=Math.max(a[i]*max[i-1],Math.max(a[i]*min[i-1],a[i]));
min[i]=Math.min(a[i]*max[i-1],Math.min(a[i]*min[i-1],a[i]));
}
int ans=Integer.MIN_VALUE;
for(int x:max) {
ans=Math.max(x,ans);
}
return ans;
}
}