文章目录前言一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解前言本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记如有侵权立即删除。一、题目1、原题链接1. 两数之和2、题目描述二、解题报告1、思路分析1暴力解法两层for循环枚举时间复杂度O(n2)。2利用哈希表由于本题中判断条件是数组值满足一定条件而返回的是数组下标所以需要利用可以存储键值对的map类型等数据结构来模拟哈希表而unordered_map底层为哈希表存取效率O(1)。所以我们可以先将元素都放入哈希表中然后来依次判断值为target-nums[i]的元素是否在哈希表中存在若存在则直接返回答案。若不存在则将当前元素及其下标存储哈希表后继续遍历。若遍历完仍未返回答案则返回空数组。2、时间复杂度时间复杂度O(n)3、代码详解classSolution{public:vectorinttwoSum(vectorintnums,inttarget){unordered_mapint,intm;for(inti0;inums.size();i){autoiterm.find(target-nums[i]);// 如果在前面的元素里找到了互补的数直接返回结果if(iter!m.end()){return{i,iter-second};}// 如果没找到就把当前元素和下标存入哈希表供后面的元素查找m[nums[i]]i;}return{};}};2026.10.18重做后补充在C的unordered_map中find函数的返回值不是布尔值bool也不是直接返回数组下标int而是返回一个迭代器iterator。如果不用autoiter的具体类型应该写为unordered_mapint,int::iterator。此题不能直接只用for (int num : nums)范围 for 循环的核心原因是它只能拿到元素的“数值”而丢掉了元素的“数组下标索引”。