题意:
给定一个数组,给出连续子数组的最大乘积
分析:
显然动态规划,MAX = max(A[i] * MAX, A[i], A[i] * MIN),MIN = min(A[i] * MIN, A[i], A[i], A[i] * MIN);
因为数组中有负数,所以每轮,需要计算当前最大值,最小值
参考代码:
http://www.programcreek.com/2014/03/leetcode-maximum-product-subarray-java/
public int maxProduct(int[] A) {
if(A==null || A.length==0)
return 0;
int maxLocal = A[0];
int minLocal = A[0];
int global = A[0];
for(int i=1; i<A.length; i++){
int temp = maxLocal;
maxLocal = Math.max(Math.max(A[i]*maxLocal, A[i]), A[i]*minLocal);
minLocal = Math.min(Math.min(A[i]*temp, A[i]), A[i]*minLocal);
global = Math.max(global, maxLocal);
}
return global;
}
连续子数组最大和:
public int maxSubArray(int[] A) {
int newsum=A[0];
int max=A[0];
for(int i=1;i<A.length;i++){
newsum=Math.max(newsum+A[i],A[i]);
max= Math.max(max, newsum);
}
return max;
}