遍历numbers,定义m_map,键为之匹配的另外一个数,值为索引(从1开始)。遍历时查看另外一个数是否出现,如果能够找到并且不是自身则输出,输出时将小的先放入vector中。没有出现,则将当前的数及索引存入到m_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
        vector<int> rst;
        map<int,int> m_map;
        for(int i=0;i<numbers.size();i++)
        {
            map<int,int>::iterator iter = m_map.find(target-numbers[i]);
            if(iter!=m_map.end())
            {
                int m = iter->second;
                int n = i+1;

                //如果是同一个数则跳过;
                if(m ==n)
                    continue;
                //如果不是同一个数则将小的索引先放入到vector中并结束查找;
                if(m > n)
                {
                    rst.push_back(n);
                    rst.push_back(m);
                }else
                {
                    rst.push_back(m);
                    rst.push_back(n);
                }
                break;
            }
            else
            {
                //如果没有找到则存储;
                m_map[numbers[i]] = i+1;
            }
        }

        return rst;
    }
};