int array[] = {-1, 4, -2, 5, -5, 2, -20, 6};
如果我有這樣的陣列,我Kadane算法實現以找到最大的子陣列的工作原理:Kadane算法負數
int max_so_far = INT_MIN;
int max_ending_here = 0;
for (int i = 0; i < size; i++) {
max_ending_here = max(max_ending_here + array[i], 0);
max_so_far = max(max_ending_here, max_so_far);
}
printf("%d\n", max_so_far);
但是,如果我把所有的底片的數組:
int array[]= {-10, -10, -10};
它不會工作,它應該返回-10,但我得到0.
我怎樣才能使它的負數呢?
謝謝!
也許你可以擴大爲什麼/如何這個解決方案會工作,並請評論你碼。 – 2013-07-12 02:54:25
最重要的是,您應該檢查數組是否爲空或空。將max_ending_here的值設置爲數組值的第一個數字。然後從數組的第二個數字開始循環數組,如果選擇(max_ending_here + array [i],array [i])的最大值。如果數組都是負數,則輸出將是最大的負數。 – flmAtVancl 2013-07-12 06:17:16