这道题目看起来很简单,但是用简单的枚举超时。然后用hash存储,这样访问任何元素的时间复杂度为常数。但是需要对重复元素做特殊处理。
1 class Solution { 2 public: 3 vector<int> twoSum(vector<int> &numbers, int target) { 4 5 vector<int> v; 6 map<int,int> m; 7 int n = numbers.size(); 8 for(int i=0;i<n;i++) 9 m.insert(pair<int,int>(numbers[i],i+1)); 10 11 for(int j=0;j<n;j++) 12 { 13 map<int,int>::iterator it; 14 it = m.find(target-numbers[j]); 15 if(it->first == target-numbers[j]) 16 { 17 for(int i=j+1;i<n;i++) 18 if(numbers[i]==target-numbers[j]) 19 { 20 v.push_back(j+1); 21 v.push_back(i+1); 22 break; 23 } 24 } 25 if(it!=m.end()&&it->second!=j+1) 26 { 27 v.push_back(j+1); 28 v.push_back(it->second); 29 break; 30 } 31 } 32 33 return v; 34 35 } 36 };
原文:http://www.cnblogs.com/ZhangYushuang/p/4290914.html