果不其然,错都跟标准错法一样,目前来说动态规划还是很吃力。就写出这个错法就废了不少劲。
class Solution
{
public:
int maxProduct(vector<int> &nums)
{
int result = nums[0];
int length = nums.size();
vector<int> s(length, 1);
s.resize(length);
for (int i = 0; i < length; i++)
{
s[i]=nums[i];
for (int j = i+1; j < length; j++)
{
if(s[i]*nums[j]>nums[j])
s[i]=s[i]*nums[j];
else
s[i]=nums[j];
result = s[i] > result ? s[i] : result;
}
}
return result;
}
};
错法就是没考虑先后出现负数的情况
我只能说解法太精妙了,现在我确实还想不到;
针对数组出现两次以上的负数的情况,它分别记录当前最大数和最小数,来考虑当前累积数是负数的情况。
class Solution
{
public:
int maxProduct(vector<int> &nums)
{
int maxcal = nums[0],mincal=nums[0],result = nums[0];
for (int i = 1; i < nums.size(); i++)
{
int vmax=maxcal,vmin=mincal;
maxcal=max(vmax*nums[i],max(nums[i],vmin*nums[i]));
mincal=min(vmin*nums[i],min(nums[i],vmax*nums[i]));
result=max(maxcal,result);
}
return result;
}
};