Dada una matriz de enteros nums y un objetivo de valor objetivo de entero, encuentre los dos enteros en la matriz cuya suma es el objetivo de valor objetivo y devuelva sus índices de matriz. 【LeetCode Caliente 100】

Pregunta 1 de las 100 preguntas más candentes:

Método 1: método de enumeración de fuerza bruta

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

Idea : esta pregunta requiere que encontremos la suma de dos números en la matriz igual al objetivo, luego supongamos que el primer número es i, luego el segundo número es el objetivo-i, recorremos la matriz directamente para encontrar i, y luego recorremos este Mientras realiza un bucle, recorra la matriz nuevamente para encontrar target-i, es decir, un recorrido de bucle de doble capa. Complejidad temporal: O(N^2)O(N2); Complejidad espacial: O(1)O(1).

Método 2: usa una tabla hash

class Solution {
    public int[] twoSum(int[] nums, int target) {
        //新建哈希表,用于存储数据;key为下表为i的值,value为数组的下标
        Map<Integer,Integer> map = new HashMap<>();

        //for循环遍历数组,先判断哈希表中是否存在target-i,若不存在将当前i的值和下标i存入哈希表
        for(int i = 0;i < nums.length;i++){
            int cur = nums[i];
            if(map.containsKey(target - cur)){
                return new int[]{i,map.get(target - cur)};
            }
            map.put(cur,i);
        }
        //哈希表遍历完都没返回,说明数组中不存在和为target的两个数
        return new int[]{0};
    }
}

Idea : Usar el método 1 puede resolver el problema, pero la complejidad de tiempo requerida es demasiado alta, entonces, ¿hay un método más eficiente? La respuesta es sí.

Por el título, podemos saber que la suma de los dos números que necesitamos devolver es el objetivo, se supone que el primer número es i, luego el otro número es el objetivo - i, cuando viajamos a i, mira el recorrido anterior ¿Hay algún objetivo-i en el número de y, de ser así, podemos guardar una capa de bucle? Así que aquí nos referimos a la tabla hash para almacenar los datos recorridos previamente.

Después de crear una nueva tabla hash, comience a recorrer la matriz. Al principio, no hay elementos en la tabla hash, y no se debe encontrar. Si target-i no se encuentra en la tabla hash, guarde el valor i actual en la tabla hash y continúe recorriendo. , hasta encontrar los dos números.

Supongo que te gusta

Origin blog.csdn.net/weixin_56960711/article/details/123276882
Recomendado
Clasificación