您的位置:首页 > 编程语言 > C语言/C++

leetcode_Maximum Product Subarray _medium(最大子数组之积)

2015-09-05 22:52 507 查看
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
.

方法:动态规划, O(n)。

和最大子数组之和的问题类似,只是这里是乘法,而且也要将最小之积(也即最小的负数积的情况进行记录,以便求出最后最大的积)记录。

class Solution {
public:
int myMax(int a,int b)
{
return a>b?a:b;
}

int myMin(int a,int b)
{
return a<b?a:b;
}

int maxProduct(vector<int>& nums) {
int n=nums.size();
int iStartMax=nums[n-1],iAllMax=nums[n-1],iStartMin=nums[n-1],iMaxTmp,iMinTmp;//iMaxTmp,iMinTmp临时保存iStartMax,iStartMin
for(int i=n-2; i>=0; i--)
{
iMaxTmp=myMax( myMax(nums[i]*iStartMax,nums[i]*iStartMin),nums[i] );
iMinTmp=myMin( myMin(nums[i]*iStartMax,nums[i]*iStartMin),nums[i] );
iStartMax=iMaxTmp;
iStartMin=iMinTmp;
iAllMax=myMax(iAllMax,iStartMax);
}
return iAllMax;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ leetcode 动态规划