动态规划
- dp_max[i]表示以第i个元素结尾的最大乘积
- dp_min[i]表示以第j个元素结尾的最小乘积(考虑负数情况)
- dp_max[i] = max{dp_max[i-1] * nums[i], dp_min[i-1] * nums[i], nums[i]};
- dp_min[i] = min{dp_min[i-1] * nums[i], dp_max[i-1] * nums[i], nums[i]};
class Solution {
public:
int maxProduct(vector<int>& nums) {
int n = nums.size();
long long dp_max = nums[0];
long long dp_min = nums[0];
long long res = nums[0];
for(int i=1; i<n; i++)
{
int tmp_max = max(dp_max * nums[i] , max((long long)nums[i], dp_min * nums[i]));
int tmp_min = min(dp_min * nums[i] , min((long long)nums[i], dp_max * nums[i]));
dp_max = tmp_max;
dp_min = tmp_min;
res = max(res,dp_max);
}
return res;
}
};