关闭

Maximum Product Subarray

143人阅读 评论(0) 收藏 举报
分类:

Find the contiguous subarray within an array (containing at least one number) which has the largest product.

For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.

用一维动态规划中的“局部最优和全局最优法”。这里的区别是维护一个局部最优不足以求得后面的全局最优,这是由于乘法的性质不像加法那样,累加结果只要是正的一定是递增,乘法中有可能现在看起来小的一个负数,后面跟另一个负数相乘就会得到最大的乘积。
不过事实上也没有麻烦很多,我们只需要在维护一个局部最大的同时,在维护一个局部最小,这样如果下一个元素遇到负数时,就有可能与这个最小相乘得到当前最大的乘积和,这也是利用乘法的性质得到的。

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        if(nums.empty())
            return 0;
        if(nums.size()==1)
            return nums[0];
        int max_temp = nums[0];
        int min_temp = nums[0];
        int max_value = nums[0];
        for (int i = 1; i < nums.size(); i++)
        {
            int a = nums[i] * max_temp;
            int b = nums[i] * min_temp;

            max_temp = max( max(a,b) , nums[i]);
            min_temp = min( min(a,b) , nums[i]);

            max_value = max(max_temp,max_value);
        }
        return max_value;
    }
};
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:35505次
    • 积分:1510
    • 等级:
    • 排名:千里之外
    • 原创:192篇
    • 转载:18篇
    • 译文:2篇
    • 评论:9条
    文章分类
    最新评论