JS Likou classique 100 questions - la somme de deux nombres

Étant donné un tableau d'entiers nums et une valeur cible entière cible, veuillez trouver les deux entiers dont la somme est la valeur cible cible dans le tableau et renvoyer leurs indices de tableau.

Vous pouvez supposer qu'il n'y a qu'une seule réponse pour chaque entrée. Cependant, le même élément du tableau ne peut pas apparaître de manière répétée dans la réponse.

Vous pouvez renvoyer les réponses dans n'importe quel ordre.

Exemple 1:

Entrée : nums = [2,7,11,15], cible = 9
Sortie : [0,1]
Explication : Parce que nums[0] + nums[1] == 9, renvoie [0, 1].

Méthode 1 : poulet faible pour la version boucle

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let arr = []
    for(let i=0; i<nums.length; i++) {
        for(let j=i+1; j<nums.length; j++) {
            if(nums[i]+nums[j] == target) {
                arr.push(i)
                arr.push(j)
                return arr
            }
        }
    }

};

Méthode 2 : convertissez maintenant le tableau d'origine en carte (clé : élément du tableau, valeur : indice correspondant)

Lors d'une boucle, découvrez s'il y a key=target-num[i] dans la carte pour le i-ème élément num[i]

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    const map = new Map();
    for (let i=0; i<nums.length; i++){
        map.set(nums[i],i)
    }
    let arr = []
    for(let i=0; i<nums.length; i++){
        if(map.has(target-nums[i]) && i!=map.get(target-nums[i]) ){
            arr.push(i)
            arr.push(map.get(target-nums[i]))
            return arr
        }
    }
};

Méthode 3 : Version avancée, une boucle pour réaliser la carte d'encapsulation et la carte de recherche, l'idée est que les éléments précédents ont été encapsulés dans la carte à chaque fois que la recherche est effectuée, même si les éléments précédents ne trouvent pas l'élément correspondant dans la carte, mais lors de la traversée plus tard, je la trouverai. Cependant, il convient de noter que la carte doit être copiée après comparaison, et le dernier élément de la valeur clé dupliquée écrasera l'élément précédent, ce qui entraînera que l'indice du précédent ne soit pas trouvé lors de la sortie.

Tel que le cas de test [3,3] 6

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    const map = new Map();
    for (let i=0; i<nums.length; i++){
        if(map.has(target-nums[i]) && i!= map.get(target-nums[i])){
            return [i,map.get(target-nums[i])]
        }
        map.set(nums[i],i)
    }
};

Je suppose que tu aimes

Origine blog.csdn.net/qq_36384657/article/details/128168260
conseillé
Classement