其他分享
首页 > 其他分享> > 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  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back

标签:152,乘积,nums,max,minF,数组,maxF,dp
来源: https://www.cnblogs.com/libin123/p/15314430.html