152. 乘积最大子数组

2021-11-02  本文已影响0人  名字是乱打的

题目:

给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

     输入: [2,3,-2,4]
     输出: 6
     解释: 子数组 [2,3] 有最大乘积 6。

     输入: [-2,0,-1]
     输出: 0
     解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

思路:

代码:

public int maxProduct(int[] nums) {
        if (nums.length==1){
            return nums[0];
        }

        int max=nums[0],itemMax=nums[0],itemMin=nums[0];
        //max 存储所有连续子数组最大值
        //itemMax,itemMin存储当前子数组最大值和最小值
        //其中需要itemMin存最小值主要因为数组里可能有负数,负数最小值再乘以一个整数就是最大值
        for (int i = 1; i < nums.length; i++) {
            if (nums[i]<0){
                int temp=itemMin;
                itemMin=itemMax;
                itemMax=temp;
            }

            itemMax=Math.max(itemMax*nums[i],nums[i]);
            itemMin=Math.min(itemMin*nums[i],nums[i]);

            max=Math.max(max,itemMax);
        }
        return max;
    }
上一篇 下一篇

猜你喜欢

热点阅读