Cover image for LeetCode Hot 100 P152 Maximum Product Subarray

LeetCode Hot 100 P152 Maximum Product Subarray


Timeline

Timeline

2026-03-21

init

Dynamic Programming

Title:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <vector>
#include <algorithm>
using std::vector;

class Solution {
public:
int maxProduct(vector<int> &nums)
{
int i, n = nums.size();
int max_val = nums[0];
// dp[i][0] represents the maximum product non-empty contiguous subarray ending with nums[i]
// dp[i][1] represents the minimum product non-empty contiguous subarray ending with nums[i]
// dp[i][0] = max{ dp[i-1][0] * nums[i],dp[i-1][1] *nums[i] , nums[i]}
// dp[i][1] = min{ dp[i-1][0] * nums[i],dp[i-1][1] *nums[i] , nums[i]}

vector<vector<int> > dp(n, vector<int>(2));

dp[0][0] = nums[0];
dp[0][1] = nums[0];

for (i = 1; i < n; i++) {
dp[i][0] = std::max(
{ dp[i - 1][0] * nums[i], dp[i - 1][1] * nums[i], nums[i] });
dp[i][1] = std::min(
{ dp[i - 1][0] * nums[i], dp[i - 1][1] * nums[i], nums[i] });
max_val = std::max(max_val, dp[i][0]);
}
return max_val;
}
};