> 简洁易懂讲清原理,讲不清你来打我~


输入一个数组和一个整数,从数组中找到两个元素和为这个整数,输出下标
![在这里插入图片描述](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 {};
}
};
```

> 喜欢简洁易懂还能讲清楚原理博客的小伙伴就关注关注这个非常高产的博主呀,下次再会~