思路分析:
- 使用动态规划,定义一个二维数组dp,其中dp[i][0]表示以第i个元素结尾的乘积最大子数组的乘积,dp[i][1]表示以第i个元素结尾的乘积最小子数组的乘积。
- 初始化dp数组的第一个元素为数组的第一个元素。
- 遍历数组,更新dp数组的值,分别计算以当前元素结尾的乘积最大和最小子数组的乘积。
- 初始化结果为负无穷,然后遍历dp数组的第一列,找出乘积最大的值。
- 返回乘积最大子数组的乘积作为结果。
class Solution {
public:// 函数用于计算数组中乘积最大的子数组int maxProduct(vector<int>& nums) {// 获取数组大小int n = nums.size();// dp数组,dp[i][0]表示以第i个元素结尾的乘积最大子数组的乘积,// dp[i][1]表示以第i个元素结尾的乘积最小子数组的乘积vector<vector<int>> dp(n, vector<int>(2, 0));// 初始化dp数组的第一个元素dp[0][0] = dp[0][1] = nums[0];// 遍历数组,计算dp数组的值for (int i = 1; i < n; i++) {// 更新乘积最大子数组dp[i][0] = max(nums[i], max(dp[i - 1][0] * nums[i], dp[i - 1][1] * nums[i]));// 更新乘积最小子数组dp[i][1] = min(nums[i], min(dp[i - 1][0] * nums[i], dp[i - 1][1] * nums[i]));}// 初始化结果为负无穷int result = -INT_MAX;// 遍历dp数组的第一列,找出乘积最大的值for (int i = 0; i < n; i++)result = max(result, dp[i][0]);// 返回乘积最大子数组的乘积return result;}
};