第一次刷leedcode,恶补一下STL,慢慢学吧。这天可真冷,嘤嘤嘤。虽然知道思路,但由于对STL几乎不了解,还是做了半天,废话不多说,看题吧。
题意:给出一个vector和一个目标的数,从vector里选出两个数,使它们的和为target,找出这两个数的位置。保证只有一个解。
思路:将vector转化成map,map的键值为它的位置,即i。然后在map里面寻找target-(*m).first,
如果找得到且这个数的位置不是i,那么就找到了,然后再用vector保存结果,再返回vector。
代码如下:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int>m;
int n=nums.size();
for(int i=0;i<n;i++)
{
m.insert(pair<int,int>(nums[i],i));
}
for(int i=0;i<n;i++)
{
if(m.count(target-nums[i])&&m[target-nums[i]]!=i)
{
vector<int>result;
result.push_back(i);
result.push_back(m[target-nums[i]]);
return result;
}
}
// for(map<int,int>::iterator it=m.begin();it!=m.end();it++)
// {
// if(m.find(target-(*it).first)!=m.end()&&m.find(target-(*it).first)!=it)
// {
// vector<int>result;
// result.push_back((*it).second);
// result.push_back((*m.find(target-(*it).first)).second);
// return result;
// }
// }
}
};