时间轴
时间轴
2026-03-21
init
动态规划
题目:
123456789101112131415161718192021222324252627282930 | using std::vector;class Solution { public: int maxProduct(vector<int> &nums) { int i, n = nums.size(); int max_val = nums[0]; // dp[i][0] 表示以nums[i]结尾的 乘积最大的非空连续 子数组 // dp[i][1] 表示以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; }}; |
