class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
//本题的思想为动态规划
//定义一个一样长的node类型的dp数组
//dp[i]有两个值,dp[i].max的含义为必须以nums[i]为结尾的情况下连续子数组的最大值
//dp[i].min的含义为必须以nums[i]为结尾的情况下,连续子数组的最小值
//为什么要求最小值,比如实例3,-2*-6的结果反而是最大的,这就是为什么要求最小值的原因
//用一个变量res统计求dp数组的过程中出现的最大值即可
struct node{
int max;
int min;
};
int max(int a,int b){
return a>b?a:b;
}
int min(int a,int b){
return a>b?b:a;
}
int maxProduct(vector<int>& nums) {
// write code here
if(nums.size()<=0)
return 0;
int n=nums.size();
node dp[n];
dp[0].max=nums[0];
dp[0].min=nums[0];
int res=dp[0].max;
for(int i=1;i<n;i++){
dp[i].max=max(max(nums[i]*dp[i-1].max,nums[i]*dp[i-1].min),nums[i]);
dp[i].min=min(min(nums[i]*dp[i-1].max,nums[i]*dp[i-1].min),nums[i]);
res=max(res, dp[i].max);
}
return res;
}
};
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
//本题的思想为动态规划
//定义一个一样长的node类型的dp数组
//dp[i]有两个值,dp[i].max的含义为必须以nums[i]为结尾的情况下连续子数组的最大值
//dp[i].min的含义为必须以nums[i]为结尾的情况下,连续子数组的最小值
//为什么要求最小值,比如实例3,-2*-6的结果反而是最大的,这就是为什么要求最小值的原因
//用一个变量res统计求dp数组的过程中出现的最大值即可
struct node{
int max;
int min;
};
int max(int a,int b){
return a>b?a:b;
}
int min(int a,int b){
return a>b?b:a;
}
int maxProduct(vector<int>& nums) {
// write code here
if(nums.size()<=0)
return 0;
int n=nums.size();
node dp[n];
dp[0].max=nums[0];
dp[0].min=nums[0];
int res=dp[0].max;
for(int i=1;i<n;i++){
dp[i].max=max(max(nums[i]*dp[i-1].max,nums[i]*dp[i-1].min),nums[i]);
dp[i].min=min(min(nums[i]*dp[i-1].max,nums[i]*dp[i-1].min),nums[i]);
res=max(res, dp[i].max);
}
return res;
}
};