[LeetCode] Two sum

我的第一题

time limit exceeded

O(N*M)

class Solution {
public:
    vector<int> twoSum(vector<int> &numbers, int target) 
    {
       vector<int> ret(2, 0);
       int len = numbers.size();
       for(int i=0; i<len; i++)
       {
           for(int j=i+1; j<len; j++)
           {
               if(numbers[i] + numbers[j] == target)
               {
                   ret[0] = i+1;
                   ret[1] = j+1;
                   return ret;
               }
           }
       }
       return ret;
    }
};

  

 O(N)解法

class Solution {
public:
    vector<int> twoSum(vector<int> &numbers, int target) 
    {
       vector<int> ret(2, 0);
       int len = numbers.size();
       map<int, int> iimap;
       vector<long long> llvec(len, 0);
       
       for(int i=0; i<len; i++)
       {
           llvec[i] = numbers[i]*(target-numbers[i]);
           
           if(iimap[ llvec[i] ] > 0)
           {
               if(numbers[ iimap[ llvec[i] ] -1] + numbers[i] == target)
               {
                   ret[0] = iimap[ llvec[i] ];
                   ret[1] = i+1;
                   break;
               }
           }
           else
           {
               iimap[ llvec[i] ] = i+1;
           }
       }
       return ret;
    }
};

  

 

 

 

posted @ 2014-02-28 22:24  老N  阅读(208)  评论(0)    收藏  举报