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;
    }    
}                










