描述
输入一个长度为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
#include <vector>
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums int整型vector * @return int整型*/int maxProduct(vector<int>& nums) {// write code hereif(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;}
};