首页 > 其他 > 详细

Maximum Product Subarray

时间:2015-06-25 12:00:29      阅读:166      评论:0      收藏:0      [点我收藏+]

最大乘积子序列

思想:动态规划+最大最小数组

         状态方程:考虑到负数,所以加上一个min。

         max[i] = Max(max[i-1]*nums[i],min[i-1]*nums[i],nums[i]);

         min[i]  = Min(max[i-1]*nums[i],min[i-1]*nums[i],nums[i]);

         注意:max[i]是指包含当前nums[i]在内的最大乘积,并不一定是前i个数的最大乘积。同理min[i]。

         所以最大乘积应该是max数组中的最大值,而不是max[size-1]。

class Solution {
public:
    int Max(int a,int b,int c)
    {
        if(a>=b&&a>=c)
           return a;
        else if(b>=a&&b>=c)
           return b;
        else
           return c;
    }
    int Min(int a,int b,int c)
    {
        if(a<=b&&a<=c)
           return a;
        else if(b<=a&&b<=c)
           return b;
        else
           return c;
    }
    int maxProduct(vector<int>& nums) {
        int size = nums.size();
        int* max = new int[size];
        int* min = new int[size];
        max[0] = nums[0];
        min[0] = nums[0];
        for(int i=1;i<size;i++)
        {
            int mx = Max(max[i-1]*nums[i],min[i-1]*nums[i],nums[i]);
            int mi = Min(max[i-1]*nums[i],min[i-1]*nums[i],nums[i]);
            max[i]=mx;
            min[i]=mi;
        }
        int max_value=max[0];
        for(int i=0;i<size;i++)
        {
            if(max[i]>max_value)
                max_value = max[i];
        }
        return max_value;
    }
};

 

Maximum Product Subarray

原文:http://www.cnblogs.com/ZhangYushuang/p/4599355.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!