给一个数组,长度至少为1,要求找出连续长度子数组乘积的最大值
class Solution {
public:
int maxProduct(vector<int>& nums) {
int tmpp=nums[0],tmpn=nums[0],ans=nums[0],tmp;
int len=nums.size();
for(int i=1;i<len;i++){
tmp=tmpp;
tmpp=max(max(nums[i],nums[i]*tmpp),nums[i]*tmpn);
tmpn=min(min(nums[i],nums[i]*tmp),nums[i]*tmpn);
ans=max(ans,tmpp);
}
return ans;
}
};
初始化当前位置0的最大乘积tmpp,最小乘积tmpn,最终答案ans,并且用tmp来保存上一步的tmpp
当前位置i的最大乘积有三种可能,nums[i],nums[i]*tmpp,nums[i]*tmpn
逐步更新,最终得到ans