javascript - Veuillez expliquer le code de l'algorithme suivant
習慣沉默
習慣沉默 2017-07-05 10:41:45
0
1
940

Voici le code de cet algorithme, implémenté en javascript, mais je ne comprends pas l'algorithme ci-dessous. Demandez à Dieu de vous expliquer.

var twoSum = function(nums, target) {
    var ret = [];
    var exist = {};
    for(var i = 0; i < nums.length; i++){
        if(typeof(exist[target - nums[i]]) !== 'undefined'){
            ret.push(exist[target - nums[i]]);
            ret.push(i + 1);
        }
        
        exist[nums[i]] = i + 1;
    }
    
    return ret
};
習慣沉默
習慣沉默

répondre à tous(1)
淡淡烟草味

Le questionneur peut essayer d'utiliser des exemples pour lire le code. Voici mon avis :

Par exemple, cliquez simplement sur l'exemple dans la capture d'écran :

La boucle for parcourt principalement le premier tableau de paramètres, puis effectue deux étapes clés :

Regardons d'abord celle qui suit if. exist[nums[i]] = i + 1; Cette phrase sera exécutée dans chaque boucle exist ici signifie dictionnaire Par exemple, le premier nombre parcouru est 2 (i=0), donc exist est enregistré : {2 : 1}. Une telle paire clé-valeur, donc après une boucle, existera :
array À son tour, « valeur d'élément » : un dictionnaire de paires clé-valeur de « index de tableau + 1 ».

Ensuite, regardons le jugement dans if. Bien sûr, lorsque i=0 dans la boucle for, exist n'a pas encore injecté la paire clé-valeur, et l'expression if est fausse

Mais quand i=1, exist[target-nums[1]] signifie exist[9-7] = exist[2]. N'est-ce pas la première paire clé-valeur d'exist qui a été injectée lorsque i=0 ? ? Alors, enregistrez la valeur de la paire clé-valeur correspondante (en fait l'index de la valeur d'origine + 1 dans le tableau d'origine) dans ret, puis enregistrez le i+1 actuel dans ret... Enfin, une fois la boucle terminée , revenez à ret , nous avons donc [1,2] ps : La réponse à l'exemple donné par le questionneur n'est pas cohérente avec le code.

Résumé : Le cœur de cet algorithme est d'utiliser l'objet exist pour stocker les éléments du tableau qui ont été parcourus, et d'utiliser target-nums[i] pour utiliser indirectement exist pour déterminer s'il existe des éléments qui remplissent les conditions parmi les éléments qui ont été parcourus dans le tableau.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal