算法题50:两数之和
思路
- 定义哈希表hashmap,其存放的键值对为<取值,下标>;
- 从开始处遍历数组,对于第i个位置,在哈希表中寻找target-nums[i]是否存在,若存在,将两个下标放入数组中返回;若不存在,将其添加至表中,继续遍历。
代码
vector<int> twoSum(vector<int>& numbers, int target) {
// write code here
//建立哈希
vector<int> res;
unordered_map<int, int> hashmap;
for(int i = 0; i < numbers.size(); i++){
//若在哈希表中找到对应元素
if(hashmap.find(target - numbers[i]) != hashmap.end()){
//通过键找值,保存下标 + 1
res.push_back(hashmap[target - numbers[i]] + 1);
res.push_back(i + 1);
}
else{
//保存当前键值对到哈希表中,键为元素值,值为下标
hashmap[numbers[i]] = i;
}
}
return res;
}