この問題で最も考えやすいのは、暴力的なトラバーサルの解決策ですが、時間計算量が o ( ) であるため、この問題はハッシュ テーブルを使用して解決できます。コードは次のとおりです。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> _map;//创建一个哈希表
for(int i = 0;i<nums.size();i++)
{
unordered_map<int,int>::iterator it = _map.find(target - nums[i]);//创建迭代器查找哈希表中是否有与当前数组值相加得target的数
if(it!=_map.end())//当迭代器it不位于哈希表尾部时,说明找到乐,返回元素
return {it->second,i};
_map[nums[i]] =i;//将当前数值放入哈希表,以便下轮循环查找
}
return {};//若找不到返回空值
}
};
このようにして、時間の複雑さを O(n) に減らします