[Implementación del algoritmo-Java] La suma de dos números

[Implementación del algoritmo-Java] La suma de dos números

1. Descripción del problema:

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

Fuente de esta pregunta: Likou 1

2. Respuesta a la pregunta:

Solución 1: violencia

Doble capa para recorrido de bucle, juzgue si la suma de dos números es el objetivo

El segundo número solo puede ser el número después del primer número, por lo que el segundo nivel de bucle for comienza desde el subíndice i + 1

el código se muestra a continuación

class Solution {
    
    
    public int[] twoSum(int[] nums, int target) {
    
    
        for(int i=0;i<nums.length;i++){
    
    
            for(int j=i+1;j<nums.length;j++){
    
    
                if(nums[i]+nums[j]==target){
    
    
                    return new int[]{
    
    i,j};
                }
            }
        }
        return new int[0];
    }
}

Análisis de algoritmos:

Complejidad de tiempo: O (N al cuadrado)

Complejidad espacial: O (1)

Solución 2: tabla hash

Cree un HashMap, la clave es nums [i], el valor es i, para que pueda obtener el valor basado en la clave a través del método get ()

Utilice el método put () para almacenar los números [i] ei de la matriz como pares clave-valor en HashMap.

Cuando el bucle for atraviesa, int otherNum = target-nums [i], juzga si otherNum existe en la clave de HashMap, y devuelve el subíndice de matriz correspondiente si existe.

el código se muestra a continuación

class Solution {
    
    
    public int[] twoSum(int[] nums, int target) {
    
    
       Map<Integer,Integer> map=new HashMap<>();
       for(int i=0;i<nums.length;i++){
    
    
           int otherNum=target-nums[i];
           if(map.containsKey(otherNum)){
    
    
               return new int[] {
    
    map.get(otherNum),i};
           }
           map.put(nums[i],i);
       }
        return new int[0]; 
    }
}

Nota: Map.put (nums [i], i) Este método debe ser posterior al juicio if

Si el caso de prueba es nums = [3,2,4], target = 6, devolverá [0,0] y el resultado no se satisface [1,2]

Porque si coloca () primero y luego si juicio, cuando juicio es solo otroNum = 6-3 = 3, devolverá dos subíndices 0, lo que significa que el mismo número se usa dos veces, lo que no cumple con las condiciones de la pregunta .

Inserte la descripción de la imagen aquí

Análisis de algoritmos

Complejidad de tiempo: O (N): para el recorrido de bucle, N es el número de elementos en la matriz

Complejidad del espacio: O (N): crea una tabla hash para almacenar el valor de la matriz, N es el número de elementos en la matriz

Supongo que te gusta

Origin blog.csdn.net/hkdhkdhkd/article/details/111657038
Recomendado
Clasificación