https://leetcode.com/problems/maximum-product-subarray/
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.
最大连续乘积,可以从最大连续和类比过来,但是我对于后者的理解一开始不够深入,所以遇到了障碍。
参考了这篇博客,才了解了原来本质就是dp,只不过恰好是线性的
class Solution {
public:
int maxProduct(vector<int>& nums) {
vector<int> max_dp(nums.size());
vector<int> min_dp(nums.size());
int result;
result = max_dp[0] = min_dp[0] = nums[0];
for(int i = 1; i < nums.size(); ++i){
max_dp[i] = max(max(nums[i]*min_dp[i-1], nums[i]*max_dp[i-1]), nums[i]);
min_dp[i] = min(min(nums[i]*min_dp[i-1], nums[i]*max_dp[i-1]), nums[i]);
result = max(result, max_dp[i]);
}
return result;
}
};