1、题目描述
输入一个数组和一个target,输出两个数组元素的索引,使得这两个数之和等于target,每个数组元素只可以用一次。
2、思路
Hash Table。
对于每个元素,check一下(target - 当前元素)是否在map中。
如果在,输出map中保存的索引值和当前索引值;
如果不在,将(target - 当前元素)和当前索引值存入map中。
3、代码
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
//Key is the number and value is its index in the vector.
unordered_map<int, int> hash;
vector<int> result;
for (int i = 0; i < numbers.size(); i++) {
int numberToFind = target - numbers[i];
//if numberToFind is found in map, return them
if (hash.find(numberToFind) != hash.end()) {
//+1 because indices are NOT zero based
result.push_back(hash[numberToFind]);
result.push_back(i);
return result;
}
//number was not found. Put it in the map.
hash[numbers[i]] = i;
}
return result;
}
};