解法:先遍历一遍数组,将数组中的元素和下标存放于一个无序的哈希表中,其中数组中的元素为key,下标为value。
遍历一遍数组,利用 unordered_map的 find函数查找哈希表中是否存在 (target-当前元素的值)。 注意可能出现 target = 2numbers[i]这种情况,所以if条件判断内要 && m[target-numbers[i]] != i。 最后返回符合条件两个下标即可。
#include <unordered_map> class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { unordered_map<int, int> m; int n = numbers.size(); for(int i=0; i<n; i++) m[numbers[i]] = i; for(int i=0; i<n; i++) { if(m.find(target-numbers[i]) != m.end() && m[target-numbers[i]] != i) { return {i+1, m[target-numbers[i]]+1}; } } return {}; } };