two sum

class Solution {
public:
    vector<int> twoSum(vector<int> &numbers, int target) {
        vector<int> ret(2,-1);
        unordered_map<int, int> m;    //value->index map
        for(int i = 0; i < numbers.size(); i ++)
        {
            if(m.find(target-numbers[i]) == m.end())
            //target-numbers[i] not appeared
                m[numbers[i]] = i;
            else
            {
                ret[0] = m[target-numbers[i]]+1; 
                ret[1] = i+1;
                return ret;
            }
        }
    }
};

每次遍历,都开始查询,如果没有匹配的值,就加入map中,这样可以保证,一次性遍历完成。即便是有相同元素也没有关系。比如3,4,3,6;target=6时。。

而不是常规的思路,先加入map然后查询。。

原文地址:https://www.cnblogs.com/kkshaq/p/4579178.html