zoukankan      html  css  js  c++  java
  • LeetCode152:乘积最大子数组

    题目描述:

    解题思路及答案:

    采用动态规划来做,设dp[ i ]表示以nums[ i ]结尾的子数组的最大乘积,接下来开始分析最大乘积的来源:

    1、负数相乘,得到最大乘积;

    2、正数相乘,得到最大乘积;

    因此,需要保存一下dp[ i - 1 ]的最大值和最小值。

     1 // 维护一个最大值和一个最小值, 因为如果最小值是一个负的很多的值,然后再乘以一个负值,那么接下来它将成为最大值,因此需要维护一个最小值
     2 class Solution {
     3     public int maxProduct(int[] nums) {
     4         int len = nums.length;
     5         if(len == 0 || nums == null) return 0;
     6         int max = nums[0];
     7         int min = nums[0];
     8         int ans = nums[0];
     9         for(int i = 1; i < len; i++){
    10             int maxtemp = max;
    11             max = Math.max(min * nums[i] , Math.max(nums[i] , nums[i] * max)); // 最大值是min * nums[i] (min 和 nums[i]都是负数的情况),或者nums[i] 或者 nums[i] * max
    12             min = Math.min(maxtemp * nums[i], Math.min(nums[i] , nums[i] * min)); // 最小值是maxtemp * nums[i] (maxtemp 和 nums[i]是异号的情况),或者nums[i] 或者 nums[i] * min
    13             ans = Math.max(max, ans); // 保存最大值
    14         }
    15         return ans;
    16     }
    17 }
  • 相关阅读:
    Microsoft office 2013安装图解
    6.2单一继承
    #include <QLabel>
    #include <QDebug>
    9.1运算符重载
    简单QT界面信号图形化输入输出
    类指针引用
    NULL和nullptr的区别
    网易云课堂_C语言程序设计进阶_第8周:图形交互程序
    5.3友元函数
  • 原文地址:https://www.cnblogs.com/zhang-yi/p/12910591.html
Copyright © 2011-2022 走看看