题解 | #两数之和#
两数之和
https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f
//根据代码随想录中的思路:这题我们需要不断地去判断与num对应的target-num是否曾经在数组里出现过。这种需要去“判断一个元素是否曾经出现过”的情况非常需要用哈希表来做。 //而且,由于本题还希望你知道每个曾经出现过的元素的下标,因此只用set不够,还得用map。 #include <unordered_map> #include <vector> class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { unordered_map<int, int>record;//key为num,value为下标。 vector<int>result; for(int i=0;i<numbers.size();i++) { int delta=target-numbers[i];//该num的差 if(record.count(delta)==1)//如果该num的差曾经出现过。就说明数组中已经有两数之和等于target的组合出现了。可以返回了。 { int firstIndex=record.find(delta)->second; int secondIndex=i; result.push_back(firstIndex+1); result.push_back(secondIndex+1); break; }else { record.emplace(numbers[i],i); } } return result; } };