class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
// sort(numbers.begin,numbers.end);
vector<int> results;
vector<int>::size_type i;
multimap<int,int>map1;
for( i=0;i<numbers.size();i++)
{
map1.insert(make_pair(numbers[i],i+1));
//map1[numbers[i]]=i+1;
}
for(multimap<int,int>::iterator iter=map1.begin();iter!=map1.end();iter++)
// for( i=0;i<numbers.size();i++)
{
//if(map1.count(target-numbers[i]))
if(map1.count(target-iter->first))
{
multimap<int,int>::iterator iter1=map1.find(target-iter->first);
if(iter1==iter) iter1++;
if(iter->second<iter1->second)
{
// results.push_back(i+1);
results.push_back(iter->second);
results.push_back(iter1->second);
}
else
{
results.push_back(iter1->second);
results.push_back(iter->second);
// results.push_back(i+1);
}
break;
}
}
return results;
}
public:
vector<int> twoSum(vector<int> &numbers, int target) {
// sort(numbers.begin,numbers.end);
vector<int> results;
vector<int>::size_type i;
multimap<int,int>map1;
for( i=0;i<numbers.size();i++)
{
map1.insert(make_pair(numbers[i],i+1));
//map1[numbers[i]]=i+1;
}
for(multimap<int,int>::iterator iter=map1.begin();iter!=map1.end();iter++)
// for( i=0;i<numbers.size();i++)
{
//if(map1.count(target-numbers[i]))
if(map1.count(target-iter->first))
{
multimap<int,int>::iterator iter1=map1.find(target-iter->first);
if(iter1==iter) iter1++;
if(iter->second<iter1->second)
{
// results.push_back(i+1);
results.push_back(iter->second);
results.push_back(iter1->second);
}
else
{
results.push_back(iter1->second);
results.push_back(iter->second);
// results.push_back(i+1);
}
break;
}
}
return results;
}
};
此题用map做比较快,但是考虑到重复的情况必须用multimap; 注意multimap的iterator只能自增。