題目:
給定一個整數數組和一個目標值,找出數組中和爲目標值的兩個數。
你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。
示例:
給定 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 的確是放在這裏的,記住別弄錯了
}
};