F4 : solde par jour en un seul parcours (O(n × J) → O(n + J))

Même correction que F3 : au lieu de reparcourir les 30 000 transactions
pour chacun des 1 000 jours (30 millions de tests), chaque montant est
ajouté directement au total de son jour.

Temps (-O2) : 0,087 s → 0,073 s. Empreinte inchangée (ff68d260a7a58441).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-21 10:56:29 +02:00
parent b40294698c
commit 6c8b915aa6
+3 -5
View File
@@ -116,12 +116,10 @@ void total_par_client(const Transaction *t, int n, long *totaux)
/* F4 : solde total de chaque jour */ /* F4 : solde total de chaque jour */
void total_par_jour(const Transaction *t, int n, long *totaux) void total_par_jour(const Transaction *t, int n, long *totaux)
{ {
for (int j = 0; j < NB_JOURS; j++) { for (int j = 0; j < NB_JOURS; j++)
totaux[j] = 0; totaux[j] = 0;
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++) /* un seul parcours, comme pour F3 */
if (t[i].jour == j) totaux[t[i].jour] += t[i].montant;
totaux[j] += t[i].montant;
}
} }
/* F5 : période de jours consécutifs dont la somme des soldes est maximale */ /* F5 : période de jours consécutifs dont la somme des soldes est maximale */