问题描述:
给定一个n个元素的数组,数组元素全部为整数,负数,正数和0均有可能存在,
设设计一个算法,找出连续的几个数组元素相乘积最大。
思路:
用动态规划很。问题的关键是,序列中有正数也有负数,所以,需要记录最大值,也要记录最小值。
Java代码:
public class MaxMulArr {
public static double maxMul(double[] num) {
int len = num.length;
if (num == null || len < 1) {
return 0;
}
double max = num[0];
double maxSofar = num[0];
double minSofar = num[0];
for (int i = 1; i < len; ++i) {
if (maxSofar > 1) {
maxSofar *= num[i];
} else {
maxSofar = num[i];
}
minSofar *= num[i];
if (maxSofar < minSofar) {
double tmp = maxSofar;
maxSofar = minSofar;
minSofar = tmp;
}
if (maxSofar > max) {
max = maxSofar;
}
}
return max;
}
public static void main(String[] args) {
double[] num = {
-3, -2, -4, 0, 5, -3, 8, 0, -12, 5, -3,
};
System.out.println(maxMul(num));
}
}