题目
给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。链接
思路
动态规划,设dp[i]
为以nums[i]
结尾的连续子数组中乘积最大的值;
则dp[i]=max(dp[i-1]*nums[i],nums[i])
,由于存在负数,所以需要加一个维度同时存储以num[i]
结尾的连续子数组中乘积最大值和最小值,当遇到nums[i]<0
时,dp[i]
的最大积计算时需要乘以dp[i-1]
的最小积,dp[i]
的最小积计算时需要乘以dp[i-1]
的最大积。
class Solution {
public int maxProduct(int[] nums) {
int max=Integer.MIN_VALUE;
int[][]dp=new int[nums.length][2];
dp[0][0]=nums[0];
dp