题目链接:https://leetcode-cn.com/problems/two-sum/
看到题目第一想法是map,然后发现并不快,有另一种更简单的办法,在了解途中还学了一些其他的。
1、用unordered_map代替map,以散列代替map内部的红黑树实现,使其可以用来处理只映射而不按key排序的需求,速度比map快很多。—《算法笔记》
2、return {i, j} 是vector的列表初始化方法,相当于返回一个包含值为i和j的vector,用来减少代码长度
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int> m;
vector<int> ans(2,-1);用来承载结果,初始化一个大小为2,值为-1的容器ans
for(int i=0;i<nums.size();i++){
if(m.find(target-nums[i])!=m.end()) {
ans[0]=m[target-nums[i]];
ans[1]=i;
break;
}
m[nums[i]]=i;
}
return ans;
}
将map改为unordered_map,
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> m;
for(int i=0;i<nums.size();i++){
if(m.find(target-nums[i])!=m.end())
return {m[target-nums[i]],i};
m[nums[i]]=i;
}
return {};
}