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。