0
点赞
收藏
分享

微信扫一扫

动态规划算法leetcode.152

public int maxProduct(int[] nums) {
int len = nums.length;
if (len == 0) {
return 0;
}
int[][] dp = new int[len][2];//dp[i][0]表示以第i个数结尾的某个连续子数组乘积最小值,另一列为最大值
//初始化
dp[0][0] = nums[0];
dp[0][1] = nums[0];
for (int i = 1; i < len; i++) {
//第i个数大于0时,应该用前i-1的最大值相乘得到dp[i][1],最小值相乘得到dp[i][0]
if (nums[i] >= 0)
{
dp[i][1] = Math.max(nums[i], dp[i - 1][1] * nums[i]);
dp[i][0]= Math.min(nums[i], dp[i - 1][0] * nums[i]);
}
else//第i个数小于0时,应该用前i-1的最小值相乘得到dp[i][1],最大值相乘得到dp[i][0]
{
dp[i][1] = Math.max(nums[i], dp[i - 1][0] * nums[i]);
dp[i][0] = Math.min(nums[i], dp[i - 1][1] * nums[i]);
}
}

int ans = Integer.MIN_VALUE;
//寻找以某个数结尾的连续子数组的最大乘积
for (int i = 0; i < len; i++) {
ans = Math.max(ans, dp[i][1]);
}
return ans;
}
举报

相关推荐

0 条评论