//two sum up
#include<iostream>
#include<map>
#include<vector>
using namespace std;
class Solution{
public:
vector<int> twosum(vector<int>& nums, int target){
int i,n;
vector<int> results;
map<int,int> hmap;
for(i =0;i<nums.size();i++){
if(!hmap.count(nums[i])){
hmap.insert(pair<int,int> (nums[i],i));
}
if(hmap.count(target-nums[i])){
n = hmap[target-nums[i]];
if(n<i){
results.push_back(n);
results.push_back(i);
}
}
}
return results;
}
};
int main(){
int n[] = {3,2,4};
vector<int> nums(n,n+3);
Solution sumT;
vector<int> mp;
int target;
cin>>target;
mp = sumT.twosum(nums,target);
cout<<mp[0]<<endl;
cout<<mp[1]<<endl;
while(1);
}
//第二遍 TwoSumUp
//还是有收获的
#include<iostream>
#include<vector>
#include<map>
using namespace std;
class Solution{
public:
vector<int> twoSum(vector<int>& num,int target){
map<int, int> enumd;
vector<int> res;
int i;
for(int i = 0; i < num.size(); i++){
//这里多了个括号所以一直有错误( ╯□╰ )
if(!enumd.count(num[i])){
enumd.insert(pair<int,int> (num[i],i));
}
//ount检查的是key
if(enumd.count(target-num[i])){
//加上这个条件是防止自己加自己可以得到目标值target,例如3+3=6
if(enumd[target-num[i]]<i){
res.push_back(enumd[target - num[i]]);
res.push_back(i);
}
}
}
return res;
}
};
int main(){
int i = 0;
int ia[] = {2,3,1,4,9};
int target;
vector<int> v(ia,ia+5);
vector<int> res;
Solution data;
cin>>target ;
//cout<<target<<" target "<<endl;
res = data.twoSum(v,target);
cout<< res[0]<<" == "<<res[1]<<endl;
while(1);
}
使用C++的map很好用,用值做key,原序号做value。