题目链接:1. 两数之和
思路:
1.暴力:直接遍历相加等于target输出,不相等输出{}
时间复杂:O(n^2)
空间复杂:O(1)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for(int i=0;i<nums.size()-1;i++){
for(int j=i+1;j<nums.size();j++){
if(nums[i]+nums[j]==target) return {i,j};
}
}
return {};
}
};
2.空间换时间:map存储键值对,每次和map内部比对,有返回对应下标,无则将值加入map中。
时间复杂度:O(N)
空间复杂度:O(N)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
std::unordered_map<int,int >map; //创建
for(int i=0;i<nums.size();i++){
auto it=map.find(target-nums[i]);
if(it!=map.end()){
return {it->second,i};
}
map.insert(pair<int,int>(nums[i],i));
}
return {};
}
};
存在的问题:对于STL容器的使用不够熟练,map容器返回值需要用
it->first /it->second 分别对应着map容器的值和键。