152乘积最大子数组 dp

152乘积最大子数组 dp

 

 

 

最大子数组和的状态转移方程是dp[i]=max(dp[i-1]+nums[i],nums[i]) 其中dp[i]表示以nums[i]结尾的最大子数组的和。所以以nums[i]结尾的最大子数组和无非就是要么加入前边的要么单独自己。

但是乘积最大子数组不满足这样的转移方程 dp[i]不一定是由dp[i-1]来决定的。

再维护一个最小乘积的数组,因为nums[i]可能为正也可能为负,求最大值就是在min[i-1]*nums[i],nums[i],max[i-1]*nums[i]中选最大的。有了最大和最小两个数组可以把结果一直积累下去。

 

 

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        //还可以这么初始化一个vector 因为maxF[0]和minF[0]都是第一个数
        vector <int> maxF(nums), minF(nums);
        for (int i = 1; i < nums.size(); ++i) {
            maxF[i] = max(maxF[i - 1] * nums[i], max(nums[i], minF[i - 1] * nums[i]));
            minF[i] = min(minF[i - 1] * nums[i], min(nums[i], maxF[i - 1] * nums[i]));
        }
        return *max_element(maxF.begin(), maxF.end());
    }
};

 

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
152乘积最大子数组 dp 152乘积最大子数组 dp 152乘积最大子数组 dp 152乘积最大子数组 dp   TRANSLATE with 152乘积最大子数组 dp COPY THE URL BELOW 152乘积最大子数组 dp 152乘积最大子数组 dp Back EMBED THE SNIPPET BELOW IN YOUR SITE 152乘积最大子数组 dp Enable collaborative features and customize widget: Bing Webmaster Portal Back
上一篇:Leetcode 152. 乘积最大子数组


下一篇:如何解决springboot参数传中文乱码