zoukankan      html  css  js  c++  java
  • leetcode152

    class Solution {
    public:
        int maxProduct(vector<int>& nums) {
            if(nums.empty())
                return 0;
            if(nums.size() == 1)
                return nums[0];
                
            int maxAll = nums[0];       //global maximum
            int maxLast = nums[0];      //maximum including last element
            int maxCur;                 //maximum including current element
            int minLast = nums[0];      //minimum including current element
            int minCur;                 //minimum including last element
            for(int i = 1; i < nums.size(); i ++)
            {
                maxCur = max(nums[i], max(maxLast*nums[i], minLast*nums[i]));
                minCur = min(nums[i], min(maxLast*nums[i], minLast*nums[i]));
                maxLast = maxCur;
                minLast = minCur;
                maxAll = max(maxAll, maxCur);
            }
            return maxAll;
        }
    };

    因为nums可能包含负数,因此之前最小的乘积*当前值,有可能成为最大值;而之前最大的乘积*当前值,有可能成为最小值。

    因此,每次计算的时候,把目前的最大乘积和最小乘积都保存下来,用于下一次计算。

    补充一个python的实现:

     1 class Solution:
     2     def maxProduct(self, nums: 'List[int]') -> 'int':
     3         n = len(nums)
     4         if n == 0:
     5             return 0
     6         elif n == 1:
     7             return nums[0]
     8         maxAll,preMax,preMin = nums[0],nums[0],nums[0]
     9         curMax,curMin = nums[0],nums[0]
    10         for i in range(1,n):
    11             curMax = max(nums[i],max(preMax*nums[i],preMin*nums[i]))
    12             curMin = min(nums[i],min(preMax*nums[i],preMin*nums[i]))
    13             preMax,preMin = curMax,curMin
    14             maxAll = max(maxAll,curMax)
    15         return maxAll
  • 相关阅读:
    算法练习--ABCD*E=DCBA
    Android实现炫酷SVG动画效果
    swift -NavigationController,代理传值
    交换机的原理及其配置(一)
    NOI2015 题解
    实现存储过程详解
    数据流图(DFD)画法
    SQL SERVER 常用字符类型的区别
    数据库常见面试题集锦,数据库面试题,数据库练习题
    Django自定义模型(model)中的字段标签
  • 原文地址:https://www.cnblogs.com/asenyang/p/9812655.html
Copyright © 2011-2022 走看看