Day7.乘积最大子数组--LeeCode练习

题目分析

给你一个整数数组nums,请你找出数组中乘积最大的子数组(该子数组中至少包含一个数字),并返回该子数组对应的乘积。

在前面我做过一个类似的问题,那个问题是加法的最大子数集。

代码

class Solution {
public:
    int maxProduct(vector<int>& nums) { 
        int minF=nums[0],maxF=nums[0],ans=nums[0];
        for(int i=1;i<nums.size();i++){
            int mi=minF,ma=maxF;
            maxF=max(max(ma*nums[i],mi*nums[i]),nums[i]);
            minF=min(min(ma*nums[i],mi*nums[i]),nums[i]);
            ans=max(maxF,ans);
        }
        return ans;
    }
};

题目来自于LeeCode
由于乘积中【负负得正】,所以整数乘以一个更大得整数会更大,负数乘以一个更大得负数也会更大。这里我们需要记住i-1为尾的数组f(i-1)的最大值和最小值。具体的式子如下:
Day7.乘积最大子数组--LeeCode练习_第1张图片因为只有一个for循环,所以空间复杂度尾O(1),时间复杂度为O(n)

你可能感兴趣的:(Day7.乘积最大子数组--LeeCode练习)