D'abord, un mea culpa:
C'est vrai que l'entrée est un tableau. Par énoncé. Donc reprocher l'utilisation du tableau est abusif. Mais l'algorithme que je propose fonctionne même "à la volée", sans tableau.
effectivement cela oblige à parcourir deux fois les cours
Cette expression est tendancieuse.
On est plus près du carré que du double.
Pour n cours de bourse, on est plus près de n(n-1)/2 que de 2n.
j'avoue que je comprends pas pourquoi tu modifies le max 2 fois
Un exemple vaut mieux qu'un long discours. Prenons les cours suivants:
50
60
70
10
20
40
Calculons min max et min_potentiel à chaque étape:
50 50 50
50 60 50
50 70 50
50 70 10
50 70 10
10 40 10
On remarque que le min_potentiel ne devient min que si il y a une valeur max lui correspondant et donnant un meilleur bénéfice que celui précédent. Ce nouveau max est inférieur au max précédent quoique donnant un meilleur bénéfice car le min_potentiel est très bas par rapport au min.
Il y a une étape, après le repérage du min_potentiel, où rien ne se passe car le top précédent est meilleur que le bénéfice en cours.
j'ai le pressentiment d'oublier un truc
On n'a pas besoin de calculer toutes les différences.
- Si le cours est inférieur au max, ça ne peut pas donner le meilleur bénéfice. (cas exclu du min_potentiel)
- Si le cours est supérieur au min, ça ne peut pas donner le meilleur bénéfice car le min serait meilleur.
- Si le cours est supérieur au max, ce cas est traité par cet algo.
- Si le cours est inférieur au min, ce cas est traité par cet algo par la création du min_potentiel.
Il n'y a qu'un min_potentiel car s'il est écrasé par une nouvelle valeur, cela signifie que le min_potentiel écrasé n'a pas donné de meilleur bénéfice et que le nouveau min_potentiel sera dorénavant plus performant que le min_potentiel écrasé.
S'il avait permis un meilleur bénéfice, alors min_potentiel serait devenu min.
Et dans tous les cas on peut oublier les vieux min car nous avons trouvé une meilleur valeur dorénavant.
Nous avons bien tous les cas.
Partager