Aller au contenu

Somme maximale de k termes consécutifs⚓︎

Écrire une fonction telle que somme_maxi(valeurs, k) renvoie la somme maximale de k termes consécutifs dans une liste de valeurs.

On garantit que valeurs est de taille au moins égale à k et que k > 0.

Example
🐍 Console Python
>>> somme_maxi([0, 1, 2, 3, 2, 1, 0], 3)
7
>>> somme_maxi([0, 1, 2, 3, 2, 1, 0], 1)
3
###
# testsbksl-nlbksl-nlassert sommepy-undmaxi([0, 1, 2, 3, 2, 1, 0], 3) == 7bksl-nlassert sommepy-undmaxi([0, 1, 2, 3, 2, 1, 0], 1) == 3bksl-nlbksl-nlbksl-nl# autres testsbksl-nlbksl-nlvaleurs = [-42] py-str 1000bksl-nlassert sommepy-undmaxi(valeurs, 100) == -42 py-str 100, "Erreur avec tableau constant"bksl-nlbksl-nlassert sommepy-undmaxi(list(range(1000)), 100) == sum(range(900, 1000))bksl-nlassert sommepy-undmaxi(list(range(-1000, 0)), 100) == -sum(range(101))bksl-nlassert sommepy-undmaxi(list(range(1000, 0, -1)), 100) == sum(range(901, 1001))bksl-nlassert sommepy-undmaxi(list(range(0, -1000, -1)), 100) == -sum(range(100))bksl-nlbksl-nl ∞/∞

def sommepy-undmaxi(valeurs, k):bksl-nl ...bksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nlassert sommepy-undmaxi([0, 1, 2, 3, 2, 1, 0], 3) == 7bksl-nlassert sommepy-undmaxi([0, 1, 2, 3, 2, 1, 0], 1) == 3bksl-nlbksl-nldef sommepy-undmaxi(valeurs, k):bksl-nl kpy-undsomme = 0bksl-nl for i in range(k):bksl-nl kpy-undsomme += valeurs[i]bksl-nl maxi = kpy-undsommebksl-nl for i in range(k, len(valeurs)):bksl-nl kpy-undsomme += valeurs[i] - valeurs[i - k]bksl-nl if kpy-undsomme > maxi:bksl-nl maxi = kpy-undsommebksl-nl return maxibksl-nlbksl-nl

A

Z

Indice 1

On pourra commencer par faire le cumul des k premières valeurs pour initialiser une variable maxi.

On pourra ensuite faire une boucle qui ajoute la valeur suivante et retranche la première valeur.

Indice 2

On pourra s'aider du code à trou

🐍 Script Python
def somme_maxi(valeurs, k):
    k_somme = ...
    for i in range(k):
        k_somme += ...
    maxi = k_somme
    for i in range(..., ...):
        k_somme += valeurs[...] - valeurs[...]
        if k_somme > maxi:
            maxi = ...
    return ...