题目:https://leetcode.com/problems/two-sum/
- 解法1:暴力解法
可以通过嵌套循环寻找合适的两个数据
时间复杂度为O(n^2)
// 伪代码
for(int i=0; i<nums.size(); i++)
for(int j=i; j<nums.size(); j++)
if(nums[i] + nums[j] == target)
res.push_back(i);
res.push_back(j);
break;
return res;
- 解法2:HASH表
对于暴力法的主要优化点,可以在查找数据上,因此,使用hash表加速查找。
在hash表中,记录每个数据的索引值。
// 伪代码
unordered_map<int, int> hash;
for(int i=0; i<nums.size(); i++)
hash[nums[i] = i;
for(int i=0; i<nums.size(); i++)
tmp = target - nums[i];
if(hash.find(tmp)!=hash.end() && hash[tmp]!=i)
res.push_back(tmp);
res.push_back(i);
break;
return res;