原题网址:https://leetcode.com/problems/maximum-product-subarray/
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
.
方法:按0将数组分段。
public class Solution {
private int max(int[] nums, int from, int to, int product) {
int right = product;
int max = right;
int left = 1;
for(int i=from; i<=to; i++) {
left *= nums[i];
right /= nums[i];
max = Math.max(max, left);
if (i<to) max = Math.max(max, right);
}
return max;
}
public int maxProduct(int[] nums) {
if (nums==null || nums.length==0) return 0;
int max = nums[0];
int product = 1;
int from = 0;
for(int i=0; i<nums.length; i++) {
if (nums[i] == 0) {
max = Math.max(max, nums[i]);
if (from < i) max = Math.max(max, max(nums, from, i-1, product));
from = i+1;
product = 1;
} else {
product *= nums[i];
if (i==nums.length-1) max = Math.max(max, max(nums, from, i, product));
}
}
return max;
}
}