LeetCode——1.两数之和
今天开始将记录自己学习LeedCode的过程
题目链接:两数之和
本题如果用暴力解法很简单:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ans;
for(int i=0;i<nums.size();i++){
for(int j=i+1;j<nums.size();j++){
if(nums[i]+nums[j]==target){
ans.push_back(i);
ans.push_back(j);
}
}
}
return ans;
}
};
但是这样做,太慢
时间复杂度为O(n^2)
因为本题只要找出两个数,使其和=target,因此也可以理解成targer-nums[i]==nums[j]
因此,我们创建一个哈希表,通过以空间换时间
注意此处使用unordered_map
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> Hashmap;
int complement;
for(int i=0;i<nums.size();i++){
auto it=Hashmap.find(target-nums[i]);
//如果找到了
if(it!=Hashmap.end()){
return {it->second,i};
}
//没有找到,那么插入新元素
Hashmap[nums[i]]=i;
}
return {};
}
};
结果如下:
本文完