> 簡潔易懂講清原理,講不清你來打我~

輸入一個數組和一個整數,從陣列中找到兩個元素和為這個整數,輸出下標
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/img_convert/c2bad139b239b345a3d6698d517d2fce.png)
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/img_convert/9978385d41132d34699ee02289924794.png)

> 模擬法

for i找第一個元素,對於這個元素,向後for j=i+1尋找第二個元素,當元素和為輸入的整數就輸出下標

```cpp
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n = nums.size();
for (int i = 0; i < n-1; ++i) {
for (int j = i + 1; j < n; ++j) {
if (nums[i] + nums[j] == target) {
return {i, j};
}
}
}
return {};
}
};
```

> 雜湊表
>
當for i找到其中一個元素時,如果在雜湊表中已經存放了i之前元素,就可以立刻找到另一個元素,當元素和為輸入的整數就輸出下標

```cpp
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int>numToIndex;
for(int i=0;i<nums.size();++i){
auto iter=numToIndex.find(target-nums[i]);
if(iter!=numToIndex.end()){
return {iter->second,i};
}
numToIndex[nums[i]]=i;
}
return {};
}
};
```

> 喜歡簡潔易懂還能講清楚原理部落格的小夥伴就關注關注這個非常高產的博主呀,下次再會~