您的位置:首页 > 其它

two sum

2015-09-29 10:32 253 查看
给一个整数数组,找到两个数使得他们的和等于一个给定的数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;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: