一、题目
二、思路
1、//原本,dp[i]=max(dp[i-1]*nums[i],nums[i]);
2、现在,加了负数后,求最大的值,最小的值
3、同时维护一个最大值和最小值
三、代码
class Solution {
public:
int maxProduct(vector<int>& nums) {
//比较三个数
int size=nums.size();
int Max_num=nums[0],Min_num=nums[0],sum=nums[0];
//原本,dp[i]=max(dp[i-1]*nums[i],nums[i]);
//现在,加了负数后,求得最大的值,最小的值
for(int i=1;i<size;++i){
//最大正数
int mx=max(max(Max_num*nums[i],nums[i]),Min_num*nums[i]);
//最小负数
int ix=min(min(Min_num*nums[i],nums[i]),Max_num*nums[i]);
Max_num=max(mx,ix);
Min_num=min(mx,ix);
sum=max(sum,Max_num);
}
return sum;
}
};