求和为target的下标相对小的两个数的下标。
我的办法时写一个结构体存储元素的值和起始位置然后将其和target的差值放入map容器中,然后遍历各个元素看其所需要的map值是否存在。
struct node{
int num;
int index;
};
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target){
map <int,node> hash;
vector <int> ans;
for (int i=0;i<numbers.size();i++){
node tmp;
tmp.num=numbers[i];
tmp.index=i;
hash[target-numbers[i]]=tmp;
}
for(int i=0;i<numbers.size();i++){
if(hash.find(numbers[i])!=hash.end()&&hash[numbers[i]].index!=i)
{
ans.push_back(i+1),ans.push_back(hash[numbers[i]].index+1);
sort(ans.begin(),ans.end());
return ans ;
}
}
return ans;
}
};