1. 两数之和
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> data;
vector<int> result;
for(int i = 0; i < nums.size(); i++){
int re = target - nums[i];
auto it = data.find(re);
if(it != data.end()){
result.push_back(i); // 当前元素下标
result.push_back(it->second); // 配对元素下标
break;
}
data[nums[i]] = i;
}
return result;
}
};

拿到此题个人的解题思路是采用哈希表

C++中具有哈希表特征的是 set 和 map 容器,题目要求获取下标同时又需要参考target - nums[i]的结果。因此采用unordered_map容器最佳,即 key 存储target - nums[i]的结果,value 存储下标

个人遇到的问题是记不清 map 容器的 find 的方法究竟寻找的 key 还是 value?答案是 key!!!

std::unordered_map::find 用于查找键,并返回一个指向该 键-值对 的迭代器