标签:
题意:给定一组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; } } } };
标签:
原文地址:http://www.cnblogs.com/kathyrine/p/4457957.html