题目

分析

考虑到有负数的参与,会使现有的最大的变成最小的,最小的变成最大的,实际上也可以看做是一种动态规划,imax和imin分别记录的是以当前位置为结尾的,最大和最小的子序列乘积的大小。

代码

 public static int maxProduct(int[] nums){

        int imax=Integer.MIN_VALUE;
        int imin= Integer.MAX_VALUE;
        int max=Integer.MIN_VALUE;
        for(int i=0;i<nums.length;i++)
        {
            if(nums[i]<0)
            {
                int temp=imax;
                imax=imin;
                imin=temp;
            }
            imax=Math.max(imax*nums[i],nums[i]);
            imin=Math.min(imin*nums[i],nums[i]);
            max=Math.max(max,imax);
        }
        return max;
    }

学习情况

1次