描述
输入一个长度为n的整型数组nums,数组中的一个或连续多个整数组成一个子数组。求所有子数组的乘积的最大值。
1.子数组是连续的,且最小长度为1,最大长度为n
2.长度为1的子数组,乘积视为其本身,比如[4]的乘积为4
3.该题的数据保证最大的乘积不会超过int的范围
数据范围: −100<=𝑎[𝑖]<=100−100<=a[i]<=100
示例1
输入:
[3,2,-1,4]
返回值:
6
说明:
子数组[3,2]的乘积为6,[3,2,-1,4]的乘积为-24,[4]的乘积为4,故返回6
cpp
#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int maxProduct(vector<int>& nums) {
// write code here
if(nums.empty())
{
return 0;
}
int n = nums.size();
std::vector<int> dp_max(n, 0);
std::vector<int> dp_min(n, 0);
dp_max[0] = nums[0];
dp_min[0] = nums[0];
int res = nums[0];
for(int i = 1; i < n; i++)
{
dp_max[i] = std::max(nums[i], std::max(dp_max[i-1] * nums[i], dp_min[i-1]*nums[i]));
dp_min[i] = std::min(nums[i], std::min(dp_max[i-1]*nums[i], dp_min[i-1]*nums[i]));
res = std::max(res, dp_max[i]);
}
return res;
}
};