# [LeetCode 1. Two Sum](https://leetcode.com/explore/challenge/card/august-leetcoding-challenge-2021/613/week-1-august-1st-august-7th/3836/)
### Daily challenge Aug 2, 2021 (EASY)
>Given an array of integers `nums` and an integer `target`, return indices of the two numbers such that they add up to target.
>
>You may assume that each input would have **exactly one solution**, and you may not use the same element twice.
>
>You can return the answer in any order.
:::info
**Example 1:**
**Input:** nums = [2,7,11,15], target = 9
**Output:** [0,1]
**Explanation:** Because nums[0] + nums[1] == 9, we return [0, 1].
:::
:::info
**Example 2:**
**Input:** nums = [3,2,4], target = 6
**Output:** [1,2]
:::
:::info
**Example 3:**
**Input:** nums = [3,3], target = 6
**Output:** [0,1]
:::
:::warning
**Constraints:**
* 2 <= nums.length <= 104
* -109 <= nums[i] <= 109
* -109 <= target <= 109
* Only one valid answer exists.
:::
---
### Approach 1 : Hash Map
**`4 ms ( 99.68% )`** **`O()`**
使用 **`unordered_map<int, int> list`** 儲存每個數字所在的 `index`。
> * 遍歷 `nums` 中所有元素,尋找 **`complement = target - nusm[i]`**。
> * 若 `list` 中不存在 `complement` ---> 存入 `list` 中。
>找到答案 ---> 回傳 **`{i, list[complement]}`**。
```cpp=1
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> list;
vector<int> ans;
for(int i=0; i<nums.size(); i++){
int complement = target - nums[i];
if(list.find(complement) != list.end() && list[complement] != i){
ans.push_back(i);
ans.push_back(list[complement]);
break;
}
list[nums[i]] = i;
}
return ans;
}
};
```