int array[] = {-1, 4, -2, 5, -5, 2, -20, 6};
Se avessi tale matrice, la mia implementazione dell'algoritmo Kadane per trovare la massima sottoarray opere:Kadane algoritmo numeri negativi
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);
Tuttavia, se ho un array di tutti negativi:
int array[]= {-10, -10, -10};
Non funzionerà, dovrebbe restituire -10, ma ottengo 0.
Come posso farlo funzionare anche per i numeri negativi?
Grazie!
Forse è possibile espandere sul perché/come questa soluzione funzionerà, e vi prego di commentare la tua codice. –
Soprattutto, dovresti controllare che l'array sia vuoto o nullo. Impostare il valore di max_ending_here come il primo numero del valore dell'array. Quindi avvia l'array partendo dal secondo numero dell'array. Se scegli il massimo del (max_ending_here + array [i], array [i]). se l'array è composto da numeri negativi, l'output sarà il numero negativo maggiore. – flmAtVancl