题目描述
解题思路
一、暴力搜索,使用双重循环,时间复杂度O(n^2),空间复杂度O(1)
二、使用哈希表,先遍历一遍数组,建立数值和其index的映射,然后再遍历一遍,进行查找,时间和空间复杂度都为O(n),代码如下
class Solution{
public:
vector<int> twoSum(vector<int>& nums,int target){
unordered_map<int,int> m;
vector<int> res;
for(int i=0;i<num.size();i++){ //先遍历一遍,建立哈希表
m[nums[i]]=i;
}
for(int i=0;i<num.size();i++){ //再遍历一遍,进行查找
int t=target-num[i];
if(m.count(t)&&m[t]!=i){ //count用于对给定的Key值计数
res.pushback(i);
res.pushback(m[t]);
break;
}
}
return res;
}
};
unordered_map是C++11标准中定义的无序关联容器,参考map 学习(下)——C++ 中的 hash_map, unordered_map以及c++primer 394页11.4