最初版本:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> re;
for(vector<int>::iterator iter = nums.begin();iter!=nums.end();++iter)
{
vector<int>::iterator it = iter;
for(++it;it!=nums.end();++it)
{
if(*iter+*it==target)
{
re.push_back(iter-nums.begin());
re.push_back(it-nums.begin());
return re;
}
}
}
return re;
}
};
190ms 才战胜百分之17.。。
两个迭代器遍历 结果符合就求出到begin的距离输出。。O(n2) O(1)。
第二个版本:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> re;
map<int,int> value_index;
for(vector<int>::iterator it = nums.begin();it!=nums.end();it++)
{
map<int,int>::iterator iter=value_index.find(target-*it);
if(iter!=value_index.end())
{
re.push_back(iter->second);
re.push_back(it-nums.begin());
return re;
}
value_index.insert(make_pair(*it,it-nums.begin()));
}
}
};
执行8ms。超过97.19%。。。
通过map映射值和下标。先检验map中是否包含当前遍历到的值的答案,包含就返回,不包含就把当前值添加到map里。