您的位置:首页 > 其它

<LeetCode OJ> 152. Maximum Product Subarray

2016-01-06 20:49 375 查看


152. Maximum Product Subarray

My Submissions

Question

Total Accepted: 48484 Total
Submissions: 230299 Difficulty: Medium

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
.

Subscribe to see which companies asked this question

Hide Tags
Array Dynamic
Programming

Hide Similar Problems
(M) Maximum Subarray (E)
House Robber (M) Product of Array Except Self

//动态规划问题:
//思路首先:虽然知道和动态规划相关,但是并没能写正确,和最大连续子数组和还是有很大区别的。
//别人的算法:
//在连续累乘的过程中,在乘当前nums[i]之前,为了能产生当前最大值(即当前自问题的解),之前的累乘值是可以小于0的,
//也可以大于0,取决于当前nums[i];但是他们的绝对值必须是最大的。
//那么我们就可以将最大正,以及最小负累乘值均求出来,再乘以当前nums[i]
//同时还有一个重新选择最大和最小起点的逻辑,如果之前的最大和最小累乘值同当前元素相乘之后,
//没有当前元素大(或小)那么当前元素就可作为新的起点,例如,前一个元素为0的情况,{1,0,9,2}
//到9的时候9应该作为一个最大值,也就是新的起点,{1,0,-9,-2}也是同样道理,-9比当前最小值还小,所以更新为当前最小值。
//原博主地址,http://blog.csdn.net/nk_test/article/details/48665631
class Solution {
public:
    int maxProduct(vector<int>& nums) {
        if(nums.empty())  
            return 0;  
        int maxMul=nums[0];  
        int minMul=nums[0];  
        int ans=nums[0];  
        for(int i=1;i<nums.size();i++)  
        {  
            int a = maxMul*nums[i];    
            int b = minMul*nums[i];    
            maxMul=max(max(a,b),nums[i]);  
            minMul=min(min(a,b),nums[i]);  
            ans=max(ans,maxMul);  
        }  
        return ans;  
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: