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
  • 相关阅读:
    Bootstrap的介绍和响应式媒体查询
    jquery内容补充
    jquery的ajax
    jquery的事件
    JQuery的筛选方法
    jquery的css
    jQuery的文档操作
    操作表单域中的value值
    jquery的属性操作
    jquery的效果
  • 原文地址:https://www.cnblogs.com/asenyang/p/9812655.html
Copyright © 2011-2022 走看看