Práctica diaria de preguntas de algoritmo --- Día 80: La suma de dos números

¡Acostúmbrate a escribir juntos! Este es el día 15 de mi participación en el "Desafío de actualización de abril del nuevo plan diario de Nuggets", haga clic para ver los detalles del evento .

1. Descripción del problema

Dada una matriz de enteros  nums y un valor de destino de entero  target, encuentre    los  dos enteros en la matriz cuya suma es el valor  de destino y devuelva sus índices de matriz.target

Puede suponer que solo habrá una respuesta para cada entrada. Sin embargo, el mismo elemento de la matriz no se puede repetir en la respuesta.

Puede devolver las respuestas en cualquier orden.

Enlace temático: La suma de dos números

En segundo lugar, los requisitos de la materia.

Ejemplo 1

输入: nums = [2,7,11,15], target = 9
输出: [0,1]
解释: 因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
复制代码

Ejemplo 2

输入: nums = [3,2,4], target = 6
输出: [1,2]
复制代码

visitar

1.哈希表、暴力
2.建议用时10~25min
复制代码

3. Análisis de problemas

1. Leyes de violencia

En términos generales, la computadora 1 puede ejecutar 1 mi + 8 1e+8 veces, el alcance de esta pregunta es 1 mi + 4 1e+4 , el bucle for doble no se agotará, primero vendrá violentamente para participar en una ola.

Si hay dos números, haré dos bucles for y buscaré y juzgaré uno por uno.

2. hachís

¿Qué significa hash?

Almacene el subíndice del elemento de matriz en la tabla hash y determine si target-v[i]el resultado del valor objetivo existe o no. Si existe, devuelva el subíndice y no hay subíndice de elemento para agregar.

En cuarto lugar, la implementación de la codificación.

1. Leyes de violencia

class Solution {
public:
    vector<int> twoSum(vector<int>& v, int target) {
        int i,j,n=v.size();//初始化
        for(i=0;i<n;i++)//双重for循环
        {
            for(j=i+1;j<n;j++)
            {
                if(v[i]+v[j]==target)//找到位置输出
                    return {i,j};
            }
        }
        return {-1,-1};
    }
};
复制代码

2. hachís

class Solution {
public:
    vector<int> twoSum(vector<int>& v, int target) {
        int i,j,n=v.size();//初始化
        map<int,int>m;//哈希表
        for(i=0;i<n;i++)
        {
            auto it=m.find(target-v[i]);//目标数字
            if(it!=m.end())//成功找到,输出
                return {it->second,i};
            m[v[i]]=i;
        }
        return {-1,-1};
    }
};

复制代码

5. Resultados de la prueba

0.png

3.png

Supongo que te gusta

Origin juejin.im/post/7086632377035784223
Recomendado
Clasificación