two sum

给一个整数数组,找到两个数使得他们的和等于一个给定的数target。

你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是1到n,不是以0开头。

您在真实的面试中是否遇到过这个题?  
Yes
样例

numbers=[2, 7, 11, 15],  target=9

return [1, 2]

注意

你可以假设只有一组答案。

class Solution {
public:
    /*
     * @param numbers : An array of Integer
     * @param target : target = numbers[index1] + numbers[index2]
     * @return : [index1+1, index2+1] (index1 < index2)
     */
    vector<int> twoSum(vector<int> &nums, int target) {
        // write your code here
        unordered_map<int,int>m;
        for(int i=0;i<nums.size();++i){
            m[nums[i]]=i+1;
        }
        sort(nums.begin(),nums.end());
        int left=0,right=nums.size()-1;
        while(left<right){
            int sum=nums[left]+nums[right];
            if(sum==target) break;
            else if(sum<target) left++;
            else right--;
        }
        vector<int>res(2);
        int l=nums[left],r=nums[right];
        if(m[l]<m[r]){
            res[0]=m[l];
            res[1]=m[r];
            return res;
        }else{
            res[0]=m[r];
            res[1]=m[l];
            return res;
        }
    }
};


你可能感兴趣的:(two sum)