1. 程式人生 > >leetcode 兩數之和 題解

leetcode 兩數之和 題解

題目:

給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。

你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。

示例:

給定 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 的確是放在這裡的,記住別弄錯了
         }
         
};