题解 | #两数之和#
两数之和
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;
}
};
查看23道真题和解析