題目鏈接: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 {};
}