Dois somas
Descrição do título
Dada uma matriz de inteiros, encontre dois números na matriz que somam o valor de destino.
A função twoSum que você fornece precisa retornar os subscritos (índice1, índice2) desses dois números e índice1 deve ser menor que índice2. Observação: o subscrito começa em 1.
Suponha que haja apenas uma solução no array fornecido.
Por exemplo: o
array fornecido é {2, 7, 11, 15}, o valor alvo é 9
output ndex1 = 1, index2 = 2
Dada uma matriz de inteiros, encontre dois números de forma que eles se somam a um número de destino específico.
A função twoSum deve retornar índices dos dois números de forma que eles se somam ao destino, onde índice1 deve ser menor que índice2. Observe que as respostas retornadas (índice1 e índice2) não são baseadas em zero.
Você pode supor que cada entrada teria exatamente uma solução.
Entrada: números = {2, 7, 11, 15}, meta = 9
Saída: índice1 = 1, índice2 = 2
Exemplo
digitar
[3,2,4], 6
Resultado
[2,3]
Ideias para resolução de problemas
- Tabela de hash, use unordered_map para registrar o mapeamento de "valor do elemento -> subscrito da matriz"
#include <unordered_map>
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
vector<int> res;
unordered_map<int, int> mp;
int size = numbers.size();
//初始化hash表
for(int i = 0; i < size; i ++) {
mp[numbers[i]] = i;
}
for(int i = 0; i < size; i ++) {
int temp = target - numbers[i];
//如果在mp中找到互补的元素,则添加进结果
//同时要确保互补的数不是它本身
if(mp.find(temp) != mp.end() && mp[temp] > i) {
res.push_back(i + 1); //由于下标是从1开始的,所以要加一
res.push_back(mp[temp] + 1);
break;
} else {
//如果在mp中没找到互补的元素,则直接跳过
continue;
}
}
return res;
}
};