web-dev-qa-db-fra.com

Améliorer la vitesse d'une fonction JavaScript

J'ai une tâche que j'ai trouvée sur les mots de code et j'ai réussi à le résoudre, toutefois, après avoir soumis sa soumission:

Exécution a expiré: (12000 ms)

Lorsque j'essaie de tester la fonction est passée, mais je suppose que c'est trop lent. Avant de vous condamner pour ne pas trouver la réponse. Je ne me soucie pas vraiment de soumettre cela comme une réponse, mais je n'ai aucune idée de la façon de la rendre plus rapide et c'est pourquoi je suis ici. Voici la fonction:

const ls = [0, 1, 3, 6, 10]

const partsSums = (ls) => {
    const sum = []
    for(let i = 0, len = ls.length; i < len + 1; i++) {
        let result = ls.slice(i).reduce( (accumulator, currentValue) => accumulator + currentValue, 0)
        sum.Push(result)
    }
    return sum
}

Voici les instructions:

Considérons cet exemple (tableau écrit en format général):

ls = [0, 1, 3, 6, 10]

Ses parties suivantes:

ls = [0, 1, 3, 6, 10]
ls = [1, 3, 6, 10]
ls = [3, 6, 10]
ls = [6, 10]
ls = [10]
ls = []

Les sommes correspondantes sont (mises en place dans une liste): [20, 20, 19, 16, 10, 0]

La fonction pièces_sums (ou ses variantes dans d'autres langues) prendra en tant que paramètre une liste LS et renvoyera une liste des sommes de ses pièces telles que définies ci-dessus.

29
Cortoloman

L'opération répétée est trop plus. E.g: lorsque vous calculez la somme des [3, 6, 10], l'étape UP [1, 3, 6, 10] est déjà calculée. Vous pouvez donc penser dans une autre direction, retour à la fin calcul de la somme de la matrice

const ls = [0, 1, 3, 6, 10];

function partSums(ls) {
   const len = ls.length;
   const dp = [];

   if(len === 0) { return [0] }
   dp[len] = 0;
   dp[len - 1] = ls[len - 1];
   for (let i = len - 2; i >= 0; i--) {
     dp[i] = dp[i + 1] + ls[i];
   }

   return dp;
}
0
hero in my life