LeetCode-1-la suma de dos números (simple)


1. Descripción

Dado un número de matriz de enteros y un objetivo de valor objetivo, busque los dos enteros cuya suma es el valor objetivo en la matriz y devuelva sus subíndices de matriz.

Puede asumir que cada entrada solo corresponderá a una respuesta. Sin embargo, el mismo elemento de la matriz no se puede utilizar dos veces.

2. Ejemplo

Dado nums = [2, 7, 11, 15], objetivo = 9
porque nums [ 0 ] + nums [ 1 ] = 2 + 7 = 9,
devuelve [0, 1]

3. Análisis

Objetivo: encontrar dos números de la matriz para que su suma sea igual a un valor dado.

Se dan dos limitaciones en el título. El primer punto es que para un valor dado, solo habrá una situación en la matriz que haga que la suma de los dos números cumpla con la condición; el segundo punto es que el mismo elemento en la matriz no se puede usar dos veces.

3.1. Búsqueda por fuerza bruta

Para todos los valores de la matriz, realice una coincidencia por pares, y su suma es igual al valor dado, y se encuentran estos dos números.
Se requieren dos niveles de recorrido, y cada nivel de recorrido busca un número; cuando su suma es igual a un valor dado, la búsqueda se detiene.
Complejidad temporal: O (n 2) O (n ^ 2) en el peor de los casosO ( n2 )

3.2. Coincidencia de diccionario

Conociendo el valor objetivo, se puede determinar el complemento de un número.
Por ejemplo, ahora se requiere que la suma de 2 números sea 9, uno de los cuales es 1, y ¿cuál es el otro?
El otro número es 8 (9-1), que es num2 = target-num1.
Podemos aprovechar esta propiedad.

Necesitamos visitar la matriz una vez, establecer el elemento de la matriz actualmente visitado como nums [i] y buscar si nums [i] ya existe (clave) en un diccionario.
Si no existe, utilice (target-nums [i]) como clave (clave) del diccionario e inserte el subíndice i como valor (valor) del diccionario;
si ya existe, especifique (target-nums [i] ) Debe existir en el array nums y haber sido visitado, su subíndice se puede obtener del diccionario.

De esta forma, estos dos números se pueden obtener con un solo recorrido.
Complejidad temporal: O (n) O (n) en el peor de los casosO ( n )

4. Código

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. Verificación

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

6. Fuente

  1. LeetCode 1. Suma de dos números
    Fuente: LeetCode
    Enlace: https://leetcode-cn.com/problems/two-sum Los
    derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.

Supongo que te gusta

Origin blog.csdn.net/PursueLuo/article/details/108746987
Recomendado
Clasificación