leetcode上热题100中的首题,首先先想暴力做法如何做,正常是两重循环找到target,这样就是o n方的复杂度,过高了。想想看能不能优化。两数之和,写作x+y=target,能不能做到on呢,转换一下思路,其实target是知道的所以x=target-y。如果我们遍历一遍数组y去找x不就好了。但是需要在o1的时间找到x,就想到了哈希表。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int>maps;
vector<int>ans;
for(int i=0;i<nums.size();i++)//因为两个数之和一定是以前一后,只要把前面的加入了哈希表后面的就一定找到
{
int another=target-nums[i];
if(maps.count(another))
{
ans.push_back(i);
ans.push_back(maps[another]);
}
maps[nums[i]]=i;
}
return ans;
}
};
这里不需要提前将数组都加入哈希表中,只用在遍历的时候加入。

被折叠的 条评论
为什么被折叠?



