[LeetCode] 152. 乘积最大子数组

。。。。自己想到的真的太菜了,想用四个变量来存储,考虑到乘以负数最大值会变小的问题,但是没有想到要用最大值或者最小值与nums[i]来比较

package leetcode;

/**
 * @author doyinana
 * @create 2020-05-20 20:27
 */
public class L152 {
    public int maxProduct(int[] nums) {
        int temp1=0,temp2=0,min=1,max=1;
        for (int num:nums){
            temp1=min*num;
            temp2=max*num;
            min=Math.min(temp1,temp2);
            max=Math.max(temp1,temp2);
        }
    }
}
View Code

大佬的答案:

public class L152 {
    public int maxProduct(int[] nums) {
        int max=Integer.MIN_VALUE,imax=1,imin=1;
        for (int num:nums){
            if (num<0){
                int tmp=imax;
                imax=imin;
                imin=imax;
            }
            imax=Math.max(imax*num,num);
            imin=Math.min(imin*num,num);

            max=Math.max(max,imax);
        }
        return max;
    }
}

另外一个的解答,其中有动态规划很多的总结

 https://leetcode-cn.com/problems/maximum-product-subarray/solution/dong-tai-gui-hua-li-jie-wu-hou-xiao-xing-by-liweiw/

猜你喜欢

转载自www.cnblogs.com/doyi111/p/12926371.html