分析
minf存储最小值,maxf存储最大值,每次最大值可能由上一个位置转化而来或者当前位置,再或者从最小值(此时为负数得情况)。
class Solution {
public:
int maxProduct(vector<int>& nums) {
vector<int>minf(nums),maxf(nums);
for(int i=1;i<nums.size();i++){
maxf[i]=max(maxf[i-1]*nums[i],max(minf[i-1]*nums[i],nums[i]));
minf[i]=min(maxf[i-1]*nums[i],min(minf[i-1]*nums[i],nums[i]));
}
return *max_element(maxf.begin(), maxf.end());;
}
};
优化
class Solution {
public:
int maxProduct(vector<int>& nums) {
int premax=nums[0],premin=nums[0];
int ans=nums[0];
for(int i=1;i<nums.size();i++){
int mx=premax,mn=premin;
premax=max(mx*nums[i],max(mn*nums[i],nums[i]));
premin=min(mx*nums[i],min(mn*nums[i],nums[i]));
ans=max(ans,premax);
}
return ans;
}
};