1. 程式人生 > >LeetCode 152. 乘積最大子序列(C++、python)

LeetCode 152. 乘積最大子序列(C++、python)

給定一個整數陣列 nums ,找出一個序列中乘積最大的連續子序列(該序列至少包含一個數)。

示例 1:

輸入: [2,3,-2,4]
輸出: 6
解釋: 子陣列 [2,3] 有最大乘積 6。

示例 2:

輸入: [-2,0,-1]
輸出: 0
解釋: 結果不能為 2, 因為 [-2,-1] 不是子陣列。

C++

class Solution {
public:
    int maxProduct(vector<int>& nums) 
    {
        int n=nums.size();
        int temp=nums[0];
        vector<int> M(n,0);
        vector<int> m(n,0);
        for(int i=0;i<n;i++)
        {
            if(i==0)
            {
                M[i]=nums[i];
                m[i]=nums[i];
            }
            else
            {
                M[i]=max(max(M[i-1]*nums[i],m[i-1]*nums[i]),nums[i]);
                m[i]=min(min(M[i-1]*nums[i],m[i-1]*nums[i]),nums[i]);
            }
            temp=max(temp,M[i]);
        }
        return temp;
    }
};

python

class Solution:
    def maxProduct(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        temp=nums[0]
        n=len(nums)
        M=[0 for i in range(n)]
        m=[0 for i in range(n)]
        for i in range(0,n):
            if i==0:
                M[i]=nums[i]
                m[i]=nums[i]
            else:
                M[i]=max(max(M[i-1]*nums[i],m[i-1]*nums[i]),nums[i])
                m[i]=min(min(M[i-1]*nums[i],m[i-1]*nums[i]),nums[i])
            temp=max(temp,M[i])
        return temp