https://leetcode.cn/problems/two-sum/?envType=study-plan-v2&envId=top-100-liked
暴力求解
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i,j;
for( i=0;i<nums.size();i++)
for(j=i+1;j<nums.size();j++)
if(nums[i]+nums[j]==target)
return {i,j};
return{};
}
};
哈希表
哈希表中存的是target-num[i],匹配成功就输出,因为哈希表查找的时间复杂度是o(1),因此本题时间复杂度可以降到o(n)
太妙了,还可以避免自身与自身比较相加的情况hhhhhh
map的find(s)成员,目的是在map中查找关键字s的pair,找到后返回指向关键字为s的pair的迭代器,找不到那么就会返回尾后迭代器即map.end(),切记迭代器其实就是一个指针,用迭代器访问pair的first或者second成员方法是:iter->first 或 iter -> second不能用.号。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int>map;//key-数值,value-下标
for(int i=0;i<nums.size();i++)
{
auto t=map.find(target-nums[i]);
if(t!=map.end())
return {t->second,i};
else{
map.insert({nums[i],i});
}
}
return{};
}
};