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

猜你喜欢

转载自blog.csdn.net/qq_27060423/article/details/82822535