暴力求解
刚开始只用了一个for循环,只考虑了两个相邻数字相加等于target的情况:
修改
然后加了层for循环,让i先停在第一个位置,j去拿剩下位置和第一个位置值作对比,然后i再跳到第二个位置,以此类推,每个位置的值都可以和剩下位置进行对比,因此时间复杂度最大应该为O(n^2)。但是不用比完就可以找到要的结果,因此勉强可以过题目要求的<O(n^2):
也可以直接这样返回:if(nums[i]+nums[j]==target ) return {i,j}
两个for循环结束都没有返回,说明没有这两个值不存在,最后 return { }即可,这是vector的初始化列表形式:
这个题目的本意是让我们练习哈希表,题目说到You may assume that each input would have exactly one solution,即您可以假设每个输入都只有一个解决方案:
map哈希
梦开始的地方,Leetcode:1.两数之和,学透哈希表,map使用有技巧!_哔哩哔哩_bilibili
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> m;
int s=0;
for(int i=0;i<nums.size();i++)
{
s=target-nums[i];
auto iter=m.find(s);
if(iter!=m.end())
{
//找到了
return {iter->second,i};
}
else
m.insert(pair<int,int>(nums[i],i));
}
return {};
}
};