Given an integer array nums
, find the contiguous subarray within an array (containing at least one number) which has the largest product.
Example 1:
Input: [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.
Example 2:
Input: [-2,0,-1] Output: 0 Explanation: The result cannot be 2, because [-2,-1] is not a subarray.
思路:
1 暴力求解:使用两个循环找到所有子序列的最大乘;2 动态规划,讲解部分请参考:here。
1 暴力求解:
int maxProduct(vector<int>& nums) {
int res = INT_MIN;
for (decltype(nums.size()) i = 0; i < nums.size(); i++) {
int tmp = nums[i];
res = max(res, tmp);
for (decltype(nums.size()) j = i + 1; j < nums.size(); j++) {
tmp *= nums[j];
res = max(res, tmp);
}
}
return res;
}
2 动态规划
int maxProduct2(vector<int> &nums) {
if (nums.size() == 1) return nums[0];
int res = nums[0];
int max_p = nums[0];
int min_n = nums[0];
for (auto it = nums.begin() + 1; it != nums.end();it++) {
int tmp = max_p;
max_p = max(max(min_n*(*it), tmp*(*it)), *it);
min_n = min(min(min_n*(*it), tmp*(*it)), *it);
res = max(res, max_p);
}
return res;
}