链接 1.两数之和
随便记记
一起来写算法题、学算法吧!
1.朴素解法
双重循环暴力
//双重循环暴力
vector<int> twoSum(vector<int>& nums, int target) {
int n = nums.size();
for(int i=0;i<n;i++){
for(int j =i+1 ;j<n;j++){
if(nums[i]+nums[j]==target)
return {i,j};
}
}
return {};
}
时间复杂度, 空间复杂度
。
2.map优化
使用哈希map优化
vector<int> twoSum(vector<int>& nums, int target) {
int n = nums.size();
unordered_map<int,int> mp;
for(int i=n-1;i>=0;i--){
if(mp.find(target-nums[i])!=mp.end()) //map中存在 target-nums[i]
return {i,mp[target-nums[i]]};
else
mp[nums[i]] = i; //把nums[i]存入map,便于后续查找
}
return {};
}
看不懂?评论解答。
时间复杂度, 空间复杂度
。