您的位置:首页 > 其它

leetcode解题方案--152--Maximum Product Subarray

2017-12-03 21:42 471 查看

题目

Find the contiguous subarray within an array (containing at least one number) which has the largest product.

For example, given the array [2,3,-2,4],

the contiguous subarray [2,3] has the largest product = 6.

分析

动态规划

因为负负得正,所以要记录负数的最大值。 两次动态规划。

class Solution {
public static int maxProduct(int[] nums) {
int[] dpp = new int[nums.length];
int[] dpn = new int[nums.length];
dpp[0] = nums[0] > 0 ? nums[0] : 0;
dpn[0] = nums[0] > 0 ? 0 : nums[0];
int retn = dpn[0];
int retp = dpp[0];

for (int i = 1; i < nums.length; i++) {
if (nums[i] > 0) {
dpp[i] = (dpp[i - 1] == 0 ? 1 : dpp[i - 1]) * nums[i];
dpn[i] = (dpn[i - 1] == 0 ? 0 : dpn[i-1])*nums[i];

} else if (nums[i] < 0) {
dpn[i] = (dpp[i - 1] == 0 ? 1 : dpp[i - 1]) * nums[i];
dpp[i] = (dpn[i - 1] == 0 ? 0 : dpn[i-1])*nums[i];

} else {
dpp[i] = 0;
dpn[i] = 0;
}
retp= Math.max(dpp[i], retp);
retn = Math.max(dpn[i],retn);
}
if (retp==0) {
return retn;
}
return retp;
}
}


看到leetcode上解答还有左右各遍历一次的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: