two sum

 1 bool cmp(pair<int,int> a, pair<int,int> b )
 2 {
 3     return a.first <= b.first;
 4 }
 5 class Solution {
 6 public:
 7     vector<int> twoSum(vector<int> &numbers, int target) {
 8         // Start typing your C/C++ solution below
 9         // DO NOT write int main() function
10         vector<int> res;
11         if( numbers.size() < 2 ) return res;
12         
13         vector< pair<int,int> > v(numbers.size(), pair<int,int>(0,0));
14         for(int i=0;i<numbers.size();i++)
15         {
16             v[i].first = numbers[i];
17             v[i].second = i+1;
18         }
19         sort(v.begin(),v.end(),cmp);
20         int left = 0, right = numbers.size() - 1;
21         while( left < right )
22         {
23             if( v[left].first + v[right].first == target )
24             {
25                 res.push_back( min(v[left].second , v[right].second) );
26                 res.push_back( max(v[left].second , v[right].second) );
27                 return res;
28             }
29             else  if( v[left].first + v[right].first < target ) 
30                 left ++;
31             else 
32                 right --;
33         }
34         return res;
35     }
36 };

 

posted on 2013-09-04 10:03  jumping_grass  阅读(221)  评论(0)    收藏  举报

导航