• 暴力***出现超时,故采用哈希法;
  • 每遍历一个numbers[i]就在对应的map中查找是否有target-numbers[i]存在;
  • 如果存在,就返回对应map中的value值和当前遍历序号(题目要求下标从1开始)
  • 否则,就将当前numbers[i]和下标i加入map;
  • 遍历完没有结果就返回空数组。
class Solution {
public:
    /**
     * 
     * @param numbers int整型vector 
     * @param target int整型 
     * @return int整型vector
     */
    vector<int> twoSum(vector<int>& numbers, int target) {
        // write code here
        unordered_map<int, int> map;
        for (int i = 0; i < numbers.size(); i++) {
            auto iter = map.find(target - numbers[i]);
            if (iter != map.end()) {
                return {iter->second + 1, i + 1};
            }
            map.insert(pair<int, int>({numbers[i], i}));
        }
        return {};
    }
};