01.两数之和 leetcode

开始的时候我觉得这道题有问题,说答案只会有一个,那12和21用哪个呢?我只能假定按照数组顺序来,小数在前大数在后。
题目并没有说数据不会重复,只说有一种答案,那如果数组是33208,target是6,答案也是只有一个啊,但是用题目中给的哈希方法肯定就会崩。

后来才发现,不是的,输出的数据顺序是不影响结果的,而数据如果重复也完全不影响数据的输出结果。因为哈希的作用是查表,只会有一种情况出现重复的情况,那就是两个数相等。但是如果相等存储的肯定是较大的那个下标,而遍历的时候会先遍历较小的下标,较小的那个如一旦发现有满足条件的就直接break,不会出问题。不过我认为如果是三个数之和还用这种方法可能就会有问题。

太久不写代码,人都傻了,连这么简单的代码都得调试半天,愚蠢。而且哈希的方法我竟然连想都没想,只是知道暴力肯定不行,有毛用,看来得找找状态了。
时间复杂的O(N),空间复杂的O(N)

class Solution {
public:
vector<int> twoSum(vector<int>&v, int target)
{
	vector<int> a;
	unordered_map<int,int>b;
	int n=v.size();

	for(int i=0;i<n;++i)
		b.insert({v[i],i});
	
	for(int i=0;i<n;++i)
	{
		auto got = b.find(target-v[i]); 
		if((got != b.end()) && (i != got->second))
		{
			a.push_back(i);
			a.push_back(got->second);
			break;
		}
	}
    return a;
}


};
发布了21 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qigezuishuaide/article/details/100875466