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 {
public int maxProduct(int[] A) {
int Max = Integer.MIN_VALUE;
if(A.length == 0) return Max;
if(A.length == 1) {Max = A[0]; return Max;}
int Maxproduct = 0;//局部最大值
int Minproduct = 0;//局部最小值
for(int i = 0;i<A.length;i++){
if((i>0)&&(A[i-1] == 0)||(A[i] == 0)||(i==0)){
Maxproduct = A[i];
Minproduct = A[i];
Max = Maxproduct > Max ? Maxproduct:Max;
continue;
}
//局部的最大值和最小值的实现 需要和当前值A[i] 最大值和最小值乘以A[i] 为什么需要当前值的比较 因为当前值左右局部最大最小值
int k = Maxproduct;
Maxproduct = Math.max(Math.max(k*A[i],A[i]),Minproduct*A[i]);
Minproduct = Math.min(Math.min(Minproduct*A[i],A[i]),k*A[i]);
Max = Maxproduct > Max ? Maxproduct:Max;
}
return Max;
}
}