题目:给定一个数组,求出这个数组中连续子数组的最大乘积,例如{2,3,-4,5},最大乘积为2*3=6。
解析:动态规划思想,保存两个临时变量maxProduct和minProduct,这两个临时变量分别存储,以当前位置结尾的连续子数组的最大乘积和最小乘积。int maxProduct(vector<int>& nums)
{
int maxRes = nums[0];
int maxProduct = nums[0];
int minProduct = nums[0];
for(int i = 1; i < nums.size(); ++i)
{
if(nums[i] >= 0)
{
maxProduct = max(maxProduct * nums[i],nums[i]);
minProduct = min(minProduct * nums[i],nums[i]);
}
else
{
int tmp = maxProduct;
maxProduct = max(minProduct *nums[i],nums[i]);
minProduct = min(tmp * nums[i],nums[i]);
}
if(maxProduct > maxRes)
maxRes = maxProduct;
}
return maxRes;
}