LeetCode 兩數之和

1.兩數之和

LeetCode傳送門

題解

#include <vector>
#include <map>
class Solution {
public:
    std::vector<int>
        twoSum(std::vector<int> & nums, int target)
        {
            std::vector<int> result;
            std::map<int,int> map;
            for(int i=0;i<nums.size();i++)
            {
                if(map.count(target - nums[i]) > 0)
                {
                    result.push_back(map[target - nums[i]]);
                    result.push_back(i);
                    return result;
                }
                map[nums[i]] = i;
            }
            return result;
        }
};

解題思路:

  • 首先需要創建一個map哈希表
  • 然後利用map的count函數去匹配哈希表中存儲的所有的key,如果匹配不到對應的key就存儲一下
  • 如果匹配到了key,就說明已經成功找出了兩個相加等於target的數字了

舉例

數組:nums = [8,2,7,9,10]
參數:target=9
輸出:[1,2]

當for里的i=0的時候,此時執行9-8=1,但是我們的map還是個空哈希表,count肯定不會生效,就會把nums[i]放map里,而map數據如下

Key Value
8 0

當for里的i=1的時候,此時會執行9-2=7,很明顯nums下是有7的,但是我們是通過map的key去查找的,很顯然,count依然不會生效,所以還是會進行存儲操作,此時map數據如下

Key Value
8 0
2 1

當for里的i=2的時候,此時會執行9-7=2,執行到這裡的時候,可以看到map內是有2這個key的。所以此時count會i命中判斷。
然後我們取出2對應的V=1,在拿到當前循環的i,就可以正確的得到兩個索引值,然後輸出即可