题解 | #两数之和#
两数之和
http://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f
元素和差的值建立映射关系,如果差值能在元素中找到说明就是加数
注意:差值和元素值相同时,这个元素值不能使用
class Solution { public: int find(vector<pair<int, int>>& m, int f, int a){ //第三个参数:差值和元素值相同时,这个元素值不能使用 for(int i=0; i<m.size(); ++i){ if(i!=a && m[i].first == f) return i; } return -1; } vector<int> twoSum(vector<int>& numbers, int target) { // write code here vector<int> res; //建立元素和与target差值映射 vector<pair<int, int>> m; for(int i=0; i<numbers.size(); ++i) m.push_back(make_pair(numbers[i], target-numbers[i])); //若差值能在元素值中找到说明就是其中一个加数 for(int i=0; i<m.size(); ++i){ if(find(m, m[i].second, i)!=-1) res.push_back(i+1); } return res; } };