/*本题最自然的想法是用暴力进行两轮搜索,容易想到,但是时间复杂度为O(n^2)。
在此种情况下,可以选择用hash table存储数字对应的下标,从而求解问题,时间
复杂度为O(n)。
方法参考自:https://github.com/soulmachine/leetcode*/
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
vector<int> result;
if(numbers.size() < 2) return result;
unordered_map<int, int> idx;//建立存储下标的map数组。
for(int i = 0; i < numbers.size(); ++i){
if(idx.find(target - numbers[i]) != idx.end()){
result.push_back(std::min(i + 1, idx[target - numbers[i]]));
result.push_back(std::max(i + 1, idx[target - numbers[i]]));
return result;
}
idx[numbers[i]] = i + 1;
}
}
};
LeetCode之Two Sum
最新推荐文章于 2016-05-05 10:12:48 发布