题目描述
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
.
解题思路
初看此题,肯定想用动态规划来求解。但实际上只需遍历一次数据即可求出答案。因为数组中出现正数负数,所以我们需要记录到某个位置时的最大值与最小值,
因为最小值可能在下一步乘以负数就变成最大值,最终进行最大值、最小值、当前值三值比较更新求出最大值和最小值。
代码
/**
* 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.
* @param A
* @return
*/
public int maxProduct(int[] A) {
int max = A[0];
int min = A[0];
int result = A[0];
int a,b,c;
for(int i = 1;i < A.length;i++){
a = max*A[i];
b = min*A[i];
c = A[i];
//需进行三值比较
max = Math.max(Math.max(a, b), c);
min = Math.min(Math.min(a, b), c);
result = Math.max(max, result);
}
return result;
}