152. Maximum Product Subarray 题解
题目描述:
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
.
题目链接:152. Maximum Product Subarray
算法描述:
由题意可知,给出一个数组,我们将返回这个数组中连续元素的最大乘积。计算方法如下:
因为是要选择数组中连续元素的最大乘积,如果当前乘积为负数时,下一个元素也为负数,则乘积为正;当下一个元素为正数时,乘积为负。可以看到,要想选择最大连乘数具有非常大的多变性。因此,我们需要记录当前最大连乘数和最小连乘数,以防它们变化。
(1)当数组为空时,我们返回 0。
(2)当数组中元素个数为 1 时,我们返回这个唯一元素。
(3)执行算法。
代码:
class Solution {
public:
int maxProduct(vector<int>& nums) {
if (nums.size()==0){
return 0;
}
if (nums.size()==1){
return nums[0];
}
int ans=nums[0];
int maxLast=nums[0];
int minLast=nums[0];
int maxCur,minCur;
for (int i=1; i<nums.size(); i++){
maxCur=max(nums[i],max(maxLast*nums[i],minLast*nums[i]));
minCur=min(nums[i],min(minLast*nums[i],maxLast*nums[i]));
ans=max(ans,maxCur);
maxLast=maxCur;
minLast=minCur;
}
return ans;
}
};