题意:给定一组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;
}
}
}
};