连续子序列的最大乘积(leetcode 152)

一:解题思路

之前做过一道题目,求连续子序列的最大和。Time:O(n),Space:O(1)

二:完整代码示例 (C++版和Java版)

C++:

class Solution 
{
private:
    int max3(int a, int b, int c)
    {
        return max(max(a,b),c);
    }
    int min3(int a, int b, int c)
    {
        return min(min(a,b),c);
    }
public:
    int maxProduct(vector<int>& nums) 
    {
        if (nums.size() == 0) return 0;
        int curMax = nums[0], curMin = nums[0], maxValue = nums[0];
        for (int i = 1; i < nums.size(); i++)
        {
            int a = curMax * nums[i];
            int b = curMin * nums[i];
            int c = nums[i];
            curMax = max3(a,b,c);
            curMin = min3(a,b,c);
            maxValue = max(maxValue,curMax);
        }

        return maxValue;
    }
};

Java:

class Solution 
    {
        private int max(int a,int b,int c)
        {
            return Math.max(Math.max(a,b),c);
        }
        
        private int min(int a,int b,int c)
        {
            return Math.min(Math.min(a,b),c);
        }
        
        public int maxProduct(int[] nums) 
        {
               if(nums==null || nums.length==0) return 0;
               int curMax=nums[0],curMin=nums[0],max=nums[0];
               for(int i=1;i<nums.length;i++)
               {
                   int a=nums[i]*curMax;
                   int b=nums[i]*curMin;
                   int c=nums[i];
                   curMax=max(a,b,c);
                   curMin=min(a,b,c);
                   max=Math.max(max,curMax);
               }
               
               return max;
        }
    }

 

Python方法一:

class Solution:
    def max3(self,a:int,b:int,c:int)->int:

        return max(a,max(b,c))

    def min3(self,a:int,b:int,c:int)->int:

        return min(a,min(b,c))

    def maxProduct(self, nums: List[int]) -> int:
        n=len(nums)
        if n==0:
            return 0
        curMaxValue=nums[0]
        curMinValue=nums[0]
        maxValue=nums[0]
        
        for i in range(1,n):
            a=nums[i]*curMaxValue
            b=nums[i]*curMinValue
            c=nums[i]
            
            curMaxValue=self.max3(a,b,c)
            curMinValue=self.min3(a,b,c)
            maxValue=max(maxValue,curMaxValue)
            
        return maxValue

 

posted @ 2020-04-10 21:54  repinkply  阅读(239)  评论(0)    收藏  举报