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> hashMap;//第一个key值是数组的值,第二个value是对应的下标
        vector<int> array;
        for(int i=0;i<numbers.size();i++)
        {
            hashMap[numbers[i]]=i;//存到哈希表中去
        }
        for(int i=0;i<numbers.size();i++)
        {
            int temp=target-numbers[i];//在哈希表中找出另一半
            auto it=hashMap.find(temp);
            if(it!=hashMap.end()&&it->second!=i)//不能等于自己,比如实例1中不能是两个3,必须是不一样的
            {
                array.push_back(i+1);//注意这里存的是位置而不是数组下标
                array.push_back(it->second+1);//存的是位置不是下标,所以要加1
                return array;
            }
        }
        return array;
    }
};