我試圖解決這個問題:正確的方法來解決產品的最大子陣
由於包含正反兩方面的整數,找到最大的產品子陣列的產品陣列。 假設:總有一個積極的產品可能,即沒有這種形式的數組:{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,所以不需要任何額外的假設。 –