第一刷
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
用于查找键,并返回一个指向该
键-值对 的迭代器
第二刷
第二刷的时候,已经轻车熟路,没有第一刷的那些基础不足的问题。
从力扣中输出图来看,有个非常高的代码示例,尽管有想到用这种方式,但是为了解题并没有去考虑性能问题,特此记录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { std::unordered_map<int, int> hash_tb; for(int i = 0; i < nums.size(); ++i) { auto it = hash_tb.find(target - nums[i]); if(it != hash_tb.end()) { return {i,it->second}; } hash_tb[nums[i]] = i; } return {}; } };
|