【LeetCode】001-Two Sum

题意:给定一组Integers,找到其中两个数使其和等于给定的一个特定的数。返回两数的序号,保证有且仅有一组解。

思路1

O(N^2) 的做法,循环两次进行遍历,直接粗暴,但是TLE。

尝试了一下利用<algorithm>中的find函数,还是TLE,所以这个find应该是O(N)的。

思路2

Hash_map,利用STL中的map函数,对于数组中的每一个数numbers[i],查看map中是否含有target-numbers[i]。但是需要考虑target是否为Numbers[i]的二倍,如果是的话,需要考察两个数的序号是否为同一个。

思路3

看了别人的代码才知道还有unordered_map这么一个东西,而且,unordered_map对于依据key来查询单独元素比map速度要快。提交之后发现map

http://www.cplusplus.com/reference/unordered_map/unordered_map/

代码如下:

class Solution {
public:
    vector<int> twoSum(vector<int> &numbers, int target) {
        vector<int> ans;
		unordered_map<long long, int> m;
		ans.clear();
		m.clear();
		
		int n = numbers.size();
		for(int i = 0; i < n; i++)
			m[numbers[i]] = i+1;
		for(int i = 0; i < n; i++)
		{
			long long t = target-numbers[i];
			if(t == numbers[i] && m[t] != i+1 || t != numbers[i] && m[numbers[i]] != 0 && m[t] != 0)
			{
				ans.push_back(i+1);
				ans.push_back(m[t]);
				return ans;
			}
		}
    }
};

  

原文地址:https://www.cnblogs.com/kathyrine/p/4457957.html