leetCode Serie 1, dos números

Dos números y

1, dos números

Descripción: Dado un entero nums matriz y un objetivo de valor objetivo, y pedirle que identifique el valor objetivo de los dos enteros de la matriz, y regresar a su subíndice de matriz. Se puede suponer que cada entrada corresponde a una sola respuesta. Sin embargo, no se puede volver a utilizar el mismo elemento de la matriz.


Interpretaciones tres tipos de solución de problemas

1, utilizando bruta, Mirando doble ciclo dos veces, cada datos está atravesada, como se muestra en los códigos de la FIG, una primera capa atravesada para encontrar el número restante, y luego usar un ciclo de recorrido segunda capa (nota que a partir de la corriente i + 1 comienzo, de lo contrario puede existir el mismo valor de índice), a continuación, volver directamente al salir del bucle después del descubrimiento, y este método puede saber claramente i <j.

2, el objeto mediante el almacenamiento de datos de objeto, los datos se almacenan primero en el mapa una clave de valor, el índice de índice es el valor, que luego tiene que atravesar, el resto de resultados, si está presente en el sujeto y no es igual a i, a continuación, la que se encuentra salida, pero tenga cuidado de pequeño a grande especie de salida.

3, el principio anterior, sino también usar la estructura de datos de almacenamiento de datos de mapas, los datos se almacenan en primer lugar en el mapa, y luego se puede mirar directamente una vez atravesado.

var twoSum = function(nums, target) {
    // 暴力解决
    // for (let i = 0; i < nums.length; i++) {
    //     let left = target - nums[i];
    //     for (let j = i + 1; j < nums.length; j++) {
    //         if (nums[j] === left) {
    //             return [i, j]
    //         }
    //     }
    // }
    //使用map实现
    // let map = {};
    // for (let i = 0; i < nums.length; i++) {
    //     map[nums[i]] = i;
    // }
    // for (let i = 0; i < nums.length; i++) {
    //     let left = target - nums[i];
    //     if (map[left] && map[left] !== i) {
    //         return [map[left], i].sort((a, b) => a - b);
    //     }
    // }

    // Map
    let map = new Map();
    for (let i = 0; i < nums.length; i++) {
        map.set(nums[i], i);
    }
    for (let i = 0; i < nums.length; i++) {
        let left = target - nums[i];
        if (map.get(left) && map.get(left) !== i) {
            return [map.get(left), i].sort((a, b) => a - b);
        }
    }
};

Esperanza algoritmo de aprendizaje serio, todos los días un desarrollo común y el progreso cuestión.

Se han publicado 19 artículos originales · ganado elogios 58 · Vistas a 50000 +

Supongo que te gusta

Origin blog.csdn.net/cyg_l02/article/details/105353542
Recomendado
Clasificación