题目:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
个人感觉:
第一次看到这个题目,有点懵逼,因为以前没做过什么题目,第一个想法就是双重循环,然而我以前写过的题目都是有标准输入和输出的,这玩意怎么搞?没办法,看题解吧,把题解写熟练,直到可以熟练地自己写出来。但是仍然有很多地方会出错。
代码:
class Solution //实不相瞒,这个地方的Solution一个字母都不能错,首字母大写呀
{
public:
vector<int> twoSum(vector<int>& nums,int target) //这里的twoSum一个字母都不能错,S大写呀
{
unordered_map<int,int> m;//建立一个无序映射
vector<int> res;//这是我们要返回的结果
for(int i=0;i<nums.size();i++)//无序映射建立过程
{
m[nums[i]]=i;
}
for(int i=0;i<nums.size();i++)
{
int t=target-nums[i];
if(m.count(t)&&m[t]!=i)//这里的count函数是用来确定m中是否有t这个数,若有则m.count值为1,否则m.count为0;
{
res.push_back(i);
res.push_back(m[t]);//这里的push_back()是用来压入数值的
break;
}
}
return res; //return res 的确是放在这里的,记住别弄错了
}
};