int array[] = {-1, 4, -2, 5, -5, 2, -20, 6};
Gdybym miał tę tablicę, moja implementacja algorytmu Kadaně aby znaleźć maksymalną subarray działa:Kadaně Algorytm Liczby ujemne
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);
Jednak jeśli mam tablicę wszystkich negatywów:
int array[]= {-10, -10, -10};
To nie zadziała, powinno wrócić - 10, ale dostaję 0.
Jak mogę sprawić, aby działał na numery ujemne?
Dziękujemy!
Być może można rozwinąć dlaczego/jak to rozwiązanie będzie działać, i proszę komentarza kod. –
Przede wszystkim powinieneś sprawdzić, czy tablica jest pusta lub zerowa. Ustaw wartość max_ending_here jako pierwszą liczbę wartości tablicy. Następnie zapisz początek tablicy z drugiego numeru tablicy.if wybierz maksimum (max_ending_here + array [i], array [i]). jeśli tablica jest liczbą ujemną, wynik będzie największą liczbą ujemną. – flmAtVancl