LeetCode001两数之和

大憨熊 提交于 2020-02-24 13:38:44

题目链接: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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!