• 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
  • 相关阅读:
    暑假练习:游戏
    Floyd算法 笔记 C/C++
    Bellman-Ford 与 SPFA 算法笔记
    Dijkstra算法 C++
    C/C++ 并查集及其优化笔记整理
    C/C++ 哈夫曼树与哈夫曼编码
    判断是否为同一颗搜索树 C/C++
    C/C++ 平衡二叉树笔记(AVL树)
    VB中 “实时错误“3704”,对象关闭时,不允许操作”
    SQL Server 2014 配置全过程
  • 原文地址:https://www.cnblogs.com/asenyang/p/9812655.html
Copyright © 2020-2023  润新知