我试图解决这个问题:正确的方法来解决产品的最大子阵
由于包含正反两方面的整数,找到最大的产品子阵列的产品阵列。 假设:总有一个积极的产品可能,即没有这种形式的数组:{0,-20,0,0}或{-20}。
例:
6 -3 -10 0 2
ANS = 180
2 3 4 5 -1 0
ANS = 120
8 -2 -2 0 8 0 -6 -8 -6 -1
ANS = 288
我的解决方案:
public static void main(String arg[]) {
ArrayList<Integer> arr = new ArrayList<Integer>();
// FAILS FOR THIS TEST CASE
// 9 0 8 -1 -2 -2 6
arr.add(9);
arr.add(0);
arr.add(8);
arr.add(-1);
arr.add(-2);
arr.add(-2);
arr.add(6);
int maxEndingHere = 1;
int minEndingHere = 1;
int max_so_far = 1;
for (int k = 0; k < arr.size(); k++) {
maxEndingHere = maxEndingHere * arr.get(k);
if (maxEndingHere < 0) {
minEndingHere = minEndingHere * maxEndingHere;
if (minEndingHere > 0) {
maxEndingHere = minEndingHere;
minEndingHere = 1;
} else {
maxEndingHere = 1;
}
}
if (maxEndingHere == 0) {
maxEndingHere = 1;
minEndingHere = 1;
}
if (max_so_far < maxEndingHere) {
max_so_far = maxEndingHere;
}
}
System.out.println(max_so_far);
}
对于其中数组的值是9 0 8 -1 -2 -2 6的情况下我的解决办法未能。正确的答案是24,但我得到了16.有人能帮我弄清楚我的方法是否错误?
我已阅读其他解决方案的问题,其中大部分是kadane的算法的变化。我只是想弄清楚我的方法是否完全错误。因为当一个负值阵列中的作出了否定的maxEndingHere积极
Kadane的算法在这里不适用。顺便说一下,因为空数组的产品是1,所以不需要任何额外的假设。 –