---
# System prepended metadata

title: 1. Two Sum
tags: [LeetCode]

---

---
tags: LeetCode
---

# 1. Two Sum
Given an array of integers, return **indices** of the two numbers such that they add up to a specific target.

You may assume that each input **would have exactly one solution**, and you may not use the same element twice.

- Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

輸入範本如下
```C#
public class Solution {
    public int[] TwoSum(int[] nums, int target) {
        
    }
}
```
---

### 直覺想法
- 因為題目限制只有一個解 , 所以不會有超過一個解答以及無解的情況發生.
- 怎麼再走訪的時候 , 有辦法拿到之前走過的成員 , 因為要判斷 a + b = target. 
- nums 似乎沒有什麼可以用的特徵 , 所以似乎只能使用 Dictionary 來儲存走訪過的結果 (target - num )
- 走訪 nums , 若現在走訪的數字存在於 Dictionary 中 
    - 現在走訪的數字 = target - 上次走訪的數字
    - 現在走訪的數字 + 上次走訪的數字 = target

```C#
public int[] TwoSum(int[] nums, int target)
{
    // key is num , and value is index
    Dictionary<int, int> keyValuePairs = new Dictionary<int, int>();
    for (int index = 0; index < nums.Length; index++)
    {
        var num = nums[index];
        if (keyValuePairs.ContainsKey(num))
        {
            return new int[] { keyValuePairs[num], index };
        }
        // 將 index 指派給該 key 的值 , 若無 key 則新建一個 key
        keyValuePairs[target - num] = index; 
    }
    throw new Exception();
}
```













### Thank you! 

You can find me on

- [GitHub](https://github.com/s0920832252)
- [Facebook](https://www.facebook.com/fourtune.chen)

若有謬誤 , 煩請告知 , 新手發帖請多包涵

# :100: :muscle: :tada: :sheep: 
