aiheshan

有多自律,才能有多自由

导航

leetcode 1 Two Sum

https://leetcode.com/problems/two-sum/

 第一种思路:

首先将数据排序,然后i从头开始,j从尾开始。如果nums[i]+nums[j] ==target,则找到了所要找的2个数。若小于target,则i++,否则j--;

因为要返回的是找到数在原数组中的序号,所以用了一个temp进行排序查找操作。

 1 class Solution {
 2 public:
 3     vector<int> twoSum(vector<int>& nums, int target) {
 4         vector<int> temp(nums);
 5         sort(temp.begin(),temp.end());
 6         int i=0;
 7         int j=temp.size()-1;
 8         while(i!=j) {
 9             if(temp[i]+temp[j] == target)
10               break;
11             if (temp[i]+temp[j] < target)
12                 i++;
13             else
14                 j--;
15         }
16         vector<int> result;
17         int ii;
18         for(ii=0;ii<nums.size();ii++)
19         {
20             if(temp[i]==nums[ii])
21               result.push_back(ii);
22             else if (temp[j] == nums[ii])
23                   result.push_back(ii);
24         }
25         return result;
26     }
27 };

 

第二种思路

利用map,在遍历数组时,nums[i] 最为key,i作为value插入map中。如果target-nums[i]在map中,则找到了相应的两个数。返回两个数的序号。

 1 class Solution {
 2 public:
 3     vector<int> twoSum(vector<int>& nums, int target) {
 4       std::map<int,int> map;
 5       std::map<int,int>::iterator it;
 6       vector<int> result;
 7       int i;
 8       for(i=0;i<nums.size();i++) {
 9           int temp = target - nums[i];
10           it=map.find(temp);
11           if(it!=map.end())
12           {
13               result.push_back(it->second);
14               result.push_back(i);
15               break;
16           }
17           map[nums[i]]=i;
18       }
19       return result;
20     }
21 };

 两种方法,第一种在leetcode上是12ms,第二种是24ms。

posted on 2016-07-22 15:07  aiheshan  阅读(106)  评论(0编辑  收藏  举报