题目链接:
题目描述:
求最大连续子序列乘积。
For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.
题目分析:
还是动态规划的思想。维护局部最优和全局最优。
乘积的话要考虑特殊情况,两个负数相乘为正。如果前面是一个较小的负数,后面是个较大的负数,相乘的话乘积就是较大的正数。所以要维护两个局部最优,一个最大值,一个最小值。
maxLocal[i+1]=max(max(maxLocal[i]*nums[i],minLocal[i]*nums[i]),nums[i]);
minLocal[i+1]=min(min(maxLocal[i]*nums[i],minLocal[i]*nums[i]),nums[i]);
代码:
class Solution {
public:
int maxProduct(vector<int>& nums) {
int len=nums.size();
if(len==0){
return 0;
}
int maxCur=nums[0];
int minCur=nums[0];
int maxRes=maxCur;
for(int i=1;i<len;i++){
int tmp=maxCur;
maxCur=max(max(maxCur*nums[i],minCur*nums[i]),nums[i]);
minCur=min(min(minCur*nums[i],tmp*nums[i]),nums[i]);
if(maxRes<maxCur){
maxRes=maxCur;
}
}
return maxRes;
}
};