Día uno suma de dos números

Día uno

Suma de dos números

Dada una matriz de números enteros numsy un valor objetivo target, averigua un valor objetivo de los dos enteros en la matriz y regresa a su subíndice 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 .

Ejemplo:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

c ++

Aquí hay una solución de problema de gran elogio, y sus errores se han corregido.

Ley de violencia:

Debido a que el mismo elemento en la matriz no se puede usar dos veces, no hay [2,2,3,4],target=6circunstancias similares

Pero no descarte [2,5,3,4],target=7el caso, entonces lo predeterminado es volver a la primera respuesta.

Después de pensar en los dos problemas anteriores, comience a pensar en soluciones

Inserte la descripción de la imagen aquí

class Solution {
    
    
public:
    vector<int> twoSum(vector<int>& nums, int target) {
    
    
        int i,j;
        for(i=0;i<nums.size()-1;i++)
        {
    
    
            for(j=i+1;j<nums.size();j++)
            {
    
    
                if(nums[i]+nums[j]==target)
                {
    
    
                   return {
    
    i,j};
                }
            }
        }
        return {
    
    };
    };
};

Resumen: El método es simple pero la complejidad del tiempo es O (n 2 ). La complejidad del espacio es O (1),
velocidad de ejecución lenta y gran consumo de espacio de memoria

Tabla hash de dos pasadas:

class Solution {
    
    
public:
    vector<int> twoSum(vector<int>& nums, int target) {
    
    
        map<int,int> a;//建立hash表存放数组元素
        vector<int> b(2,-1);//存放结果
        for(int i=0;i<nums.size();i++)
            a.insert(map<int,int>::value_type(nums[i],i));
        for(int i=0;i<nums.size();i++)
        {
    
    
            if(a.count(target-nums[i])>0&&(a[target-nums[i]]!=i))
            //判断是否找到目标元素且目标元素不能是本身
            {
    
    
                b[0]=i;
                b[1]=a[target-nums[i]];
                break;
            }
        }
        return b;
    };
};

Una tabla hash

Mejora: mientras iteramos e insertamos elementos en la tabla, también regresaremos y comprobaremos si el elemento de destino correspondiente al elemento actual ya existe en la tabla. Si existe, entonces hemos encontrado la solución correspondiente y la devolvemos inmediatamente.

class Solution {
    
    
public:
    vector<int> twoSum(vector<int>& nums, int target) {
    
    
        map<int,int> a;//提供一对一的hash
        vector<int> b(2,-1);//用来承载结果,初始化一个大小为2,值为-1的容器b
        for(int i=0;i<nums.size();i++)
        {
    
    
            if(a.count(target-nums[i])>0)
            {
    
    
                b[0]=a[target-nums[i]];
                b[1]=i;
                break;
            }
            a[nums[i]]=i;//反过来放入map中,用来获取结果下标
        }
        return b;
    };
};

Supongo que te gusta

Origin blog.csdn.net/qq_44082148/article/details/111937084
Recomendado
Clasificación