題目描述
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.
思路
記錄最小值和最大值。
代碼
class Solution {
public:
int maxProduct(vector<int>& nums) {
int n = nums.size();
vector<vector<int> > dp(n, vector<int>(2));
dp[0][0] = nums[0];
dp[0][1] = nums[0];
int res = nums[0];
for (int i=1; i<n; ++i) {
dp[i][0] = min(min(dp[i-1][0]*nums[i], dp[i-1][1]*nums[i]), nums[i]);
dp[i][1] = max(max(dp[i-1][0]*nums[i], dp[i-1][1]*nums[i]), nums[i]);
res = max(res, dp[i][1]);
}
return res;
}
};