题解 | #两数之和# 详细注释 双超99
两数之和
http://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f
解题思路
哈希。
代码
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int m = numbers.size();//计算数组长
vector<int> ans;//存储答案
unordered_map<int, int> numPos;//存储元素位置的哈希表
for(int i = 0; i < m; i++){
if(numPos.find(target-numbers[i]) != numPos.end()){//如果找到目标,则返回答案
int a = min(numPos[numbers[i]], numPos[target-numbers[i]]);
ans.push_back(a);
ans.push_back(numPos[target-numbers[a]]);
return ans;
}
numPos[numbers[i]] = i;//没找到填表继续扫描下一个元素
}
return ans;
}
};
时间复杂度:O(N)。N为输入数组长度。
空间复杂度:O(N)。哈希表需要O(N)的空间。