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;
}
};