LeetCode001兩數之和

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

參考文章
1
2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章