美文网首页
数组中连续子数组的最大乘积(LeetCode152. 乘积最大子

数组中连续子数组的最大乘积(LeetCode152. 乘积最大子

作者: 雁阵惊寒_zhn | 来源:发表于2020-11-15 21:08 被阅读0次

    题目

    解析

    在了解连续子数组最大乘积之前,请先参考数组中连续子数组的最大和(LeetCode53. 最大子序和)
    比起连续子数组最大和只记录当前元素加和的结果sum,连续子数组最大乘积中需要记录的是当前元素乘积的最大值max和最小值min,这是由于最大的乘积可能是最大的正值,也可能是最大的负值(也就是最小值),再与当前元素乘积得到的。与连续子数组最大和相同的需要记录当前元素的最大乘积result。假设当前数组nums,遍历到下标为i的元素上,计算max*nums[i],min*nums[i]和nums[i]中的最大值max和最小值min,更新最大值max和最小值min。如果最大值max大于result值,更新result记录下这个更大的值。

    代码

    public int maxProduct(int[] nums) {
        int max = nums[0]; int min = nums[0]; int result = nums[0];
        for(int i = 1; i < nums.length; ++i){
            int max0 = max; int min0 = min;
            max = maxThreeNums(max0 * nums[i], min0 * nums[i], nums[i]);
            min = minThreeNums(max0 * nums[i], min0 * nums[i], nums[i]);
            if(max > result){
                result = max;
            }
        }
        return result;
    }
    
    private int maxThreeNums(int a, int b, int c){
        return Math.max(Math.max(a, b), c);
    }
    
    private int minThreeNums(int a, int b, int c){
        return Math.min(Math.min(a, b), c);
    }
    

    相关文章

      网友评论

          本文标题:数组中连续子数组的最大乘积(LeetCode152. 乘积最大子

          本文链接:https://www.haomeiwen.com/subject/giplvktx.html