第一种方法DP,并用一维vector进行存取以当前下表开始所能取得的最大连续子数组,在最后一个用例超时
代码:
class Solution {
public:
int maxProduct(vector<int>& nums) { //dp
if(1==nums.size())
return nums[0];
vector<int> ansstore(nums.size(),INT_MIN);
int temp;
for(int i=nums.size()-1;i>=0;--i)
{
int tempmax = nums[i];
ansstore[i] = nums[i];
for(int j=i-1;j>=0;--j)
{
if(0==nums[j]||0==nums[j+1])
{
ansstore[j] = nums[j];
int temp = nums[j]>ansstore[j+1]?nums[j]:ansstore[j+1];
tempmax = temp>tempmax?temp:tempmax;
}
else
{
int temp = ansstore[j+1]*nums[j]>nums[j]?ansstore[j+1]*nums[j]:nums[j];
tempmax = temp>tempmax?temp:tempmax;
ansstore[j] = ansstore[j+1]*nums[j];
}
}
ansstore[i] = tempmax;
}
int ans = ansstore[0];
for(int i=1;i<ansstore.size();++i)
{
if(ansstore[i]>ans)
ans = ansstore[i];
}
return ans;
}
};
第二种方法 AC:
static int x = []()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();
class Solution {
public:
int maxProduct(vector<int>& nums) {
int maxnum = nums[0];
int minnum = nums[0];
int ans = nums[0];
for(int i=1;i<nums.size();++i)
{
int temp1 = maxnum*nums[i];
int temp2 = minnum*nums[i];
maxnum = max(max(temp1,temp2),nums[i]);
minnum = min(min(temp1,temp2),nums[i]);
ans = max(maxnum,ans);
}
return ans;
}
};