積最大サブ配列


テーマ:整数配列numsをあげます.配列の中で最も積が大きい連続サブ配列(このサブ配列には少なくとも1つの数字が含まれている)を見つけて、そのサブ配列に対応する積を返してください.
構想:動的計画dp[i][1]はnums[i]を末尾とする最大積である.本題と最大サブシーケンスと異なる点は負が正であることであり、nums[i]>0最大値乗nums[i]が最大値最小値乗nums[i]が最小値になりnums[i]<0になると逆注意:nums[i]>0で最大値がゼロ未満になると最大値はnums[i]となり、その他は同じである.
class Solution {
    public int maxProduct(int[] nums) {
        int n = nums.length;
        int res = nums[0];
        int p1 = nums[0];
        int p2 = nums[1];
        for(int i = 1;i<n;i++){
            if(nums[i]>0){
                int tmp1 = p1*nums[i];
                int tmp2 = p2*nums[i];
                p1 = Math.max(tmp1,nums[i]);
                p2 = Math.min(tmp2,nums[i]);
            }
            else if(nums[i]==0){
                p1 = 0;
                p2 = 0;
            }else{
                
            }
            res = Math.max(Math.max(p1,p2),res);
        }
        return res;
        return res;
    }
}