您的位置:首页 > 其它

leetcode-152 Maximum Product Subarray

2015-05-14 14:49 399 查看
对于Product Subarray,要考虑到一种特殊情况,即负数和负数相乘:如果前面得到一个较小的负数,和后面一个较大的负数相乘,得到的反而是一个较大的数,如{2,-3,-7},所以,我们在处理乘法的时候,除了需要维护一个局部最大值,同时还要维护一个局部最小值,由此,可以写出如下的转移方程式:

max_copy[i] = max_local[i]

max_local[i + 1] = Max(Max(max_local[i] * A[i], A[i]), min_local * A[i])

min_local[i + 1] = Min(Min(max_copy[i] * A[i], A[i]), min_local * A[i])

max_local[i + 1]表示已下标i+1结尾的连续字数组的最大乘积

<span style="font-family:Microsoft YaHei;font-size:14px;">class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int len = nums.size();
        if(len == 0) return -1;
        int res = nums[0];
        int dpmax = nums[0] , dpmin = nums[0];
        for(int i = 1; i < len; i++){
            int tmpmax = max(max(dpmax * nums[i],nums[i]),dpmin * nums[i]);
            dpmin = min(dpmax * nums[i],min(dpmin * nums[i],nums[i]));
            dpmax = tmpmax;
            if(dpmax > res) res = dpmax;
        }
        return res;
    }
};</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: