给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
//第一种思路:动态规划,用两个dp数组dp_max[i], dp_min[j],分别记录到第i个元素时的最大和最小连续乘积
dp_max[i] = max(dp_max[i-1] * nums[i], dp_min[i-1] * nums[i], nums[i])
dp_min[i] = mmin(dp_min[i-1] * nums[i], dp_max[i-1] * nums[i], nums[i])
#define MAX_THREE(a, b, c) (max((a), max((b), (c))))
#define MIN_THREE(a, b, c) (min((a), min((b), (c))))
class Solution {
public:
int maxProduct(vector<int>& nums) {
if(nums.empty())
return 0;
int len = nums.size();
if(len == 1)
return nums[0];
vector<int> dp_max(len, 0);
vector<int> dp_min(len, 0);
dp_max[0] = nums[0];
p_min[0] = nums[0];