LeetCode-1-la somme de deux nombres (simple)


1. Description

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

Vous pouvez supposer que chaque entrée ne correspondra qu'à une seule réponse. Cependant, le même élément du tableau ne peut pas être utilisé deux fois.

2. Exemple

Étant donné nums = [2, 7, 11, 15], target = 9
car nums [ 0 ] + nums [ 1 ] = 2 + 7 = 9
donc renvoie [0, 1]

3. Analyse

Objectif: trouver deux nombres du tableau afin que leur somme soit égale à une valeur donnée.

Deux limitations sont données dans le titre. Le premier point est que pour une valeur donnée, il n'y aura qu'une seule situation dans le tableau qui fera que la somme des deux nombres remplisse la condition; le deuxième point est que le même élément du tableau ne peut pas être utilisé deux fois.

3.1. Recherche par force brute

Pour toutes les valeurs du tableau, effectuez une correspondance par paire, et leur somme est égale à la valeur donnée, et ces deux nombres sont trouvés.
Deux niveaux de parcours sont requis et chaque niveau de parcours recherche un nombre; lorsque leur somme est égale à une valeur donnée, la recherche s'arrête.
Complexité temporelle: O (n 2) O (n ^ 2) dans le pire des casO ( n2 )

3.2. Correspondance de dictionnaire

Connaissant la valeur cible, le complément d'un nombre peut être déterminé.
Par exemple, il est maintenant nécessaire que la somme de 2 nombres soit 9, dont l'un est 1, et quel est l'autre?
L'autre nombre est 8 (9-1), qui est num2 = target-num1.
Nous pouvons profiter de cette propriété.

Nous devons visiter le tableau une fois, définir l'élément de tableau actuellement visité comme nums [i], et rechercher si nums [i] existe déjà (clé) dans un dictionnaire.
S'il n'existe pas, utilisez (target-nums [i]) comme clé (clé) du dictionnaire, et insérez l'indice i comme valeur (valeur) du dictionnaire;
s'il existe déjà, spécifiez (target-nums [i] ) Doit exister dans le tableau nums et avoir été visité, son indice peut être obtenu à partir du dictionnaire.

De cette manière, ces deux nombres peuvent être obtenus avec un seul parcours.
Complexité temporelle: O (n) O (n) dans le pire des casO ( n )

4. Code

class Solution {
    
    
    public int[] twoSum(int[] nums, int target) {
    
    
        int[] indices = new int[2];
        out:
        for(int i = 0; i < nums.length; ++i)
        {
    
    
            for(int j = i + 1; j < nums.length; ++j)
            {
    
    
                if(nums[i] + nums[j] == target)
                {
    
    
                    indices[0] = i;
                    indices[1] = j;
                    break out;
                }
            }
        }
        return indices;
    }
}
class Solution {
    
    
    public int[] twoSum(int[] nums, int target) {
    
    
        int[] indices = new int[2];
        Map<Integer, Integer> dict = new HashMap<>();
        
        for(int i = 0; i < nums.length; ++i)
        {
    
    
            if(dict.containsKey(nums[i]))
            {
    
    
                indices[0] = dict.get(nums[i]);
                indices[1] = i;
                break;
            }
            else
            {
    
    
                dict.put(target - nums[i], i);
            }
        }
        return indices;
    }
}

5. Vérification

Insérez la description de l'image ici

Insérez la description de l'image ici

6. Source

  1. LeetCode 1. Somme de deux nombres
    Source: LeetCode
    Lien: https://leetcode-cn.com/problems/two-sum Le
    copyright est la propriété de LeetCode . Pour les réimpressions commerciales, veuillez contacter l'autorisation officielle. Pour les réimpressions non commerciales, veuillez indiquer la source.

Je suppose que tu aimes

Origine blog.csdn.net/PursueLuo/article/details/108746987
conseillé
Classement