[LeetCode 1] Two Sum solution

来源:互联网 发布:如何用python开发软件 编辑:程序博客网 时间:2024/05/17 12:24

Given an array of integers, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution.

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

Ideas: 

  1. 暴力法。(O(n*n))
  2. hashmap. 先将array 放到hashmap 中形成<key, value>结构。然后查找。C++里使用unorder_map<int, int>
  3. 排序,再两指针夹逼。 前提是用struct 存下index 和value.

//[Solution 1] O(n*n)
class Solution {public:vector<int> twoSum(vector<int> &numbers, int target) {vector<int> result;if(numbers.size() <= 0) return result;for(int i = 0; i < numbers.size() – 1; i++){for(int j = i + 1; j < numbers.size(); j++){if(numbers[i] + numbers[j] == target){result.push_back(i + 1);result.push_back(j + 1);}}}return result;}};


//[Solution 2] O(n) /actually it is O(nlgn) in C++
class Solution {public:    vector<int> twoSum(vector<int> &numbers, int target) {        vector<int> result;        unordered_map <int, int> myMap ;                for(int i = 0; i < numbers.size(); i++)        {            myMap[numbers[i]] = i;        }                for(int i = 0; i < numbers.size(); i++)        {            const int gap = target - numbers[i];            if(myMap.find(gap) != myMap.end())            {                if(i == myMap[gap]) continue;//make sure not the same value add twices                result.push_back(i + 1);                result.push_back(myMap[gap] + 1);                break;            }        }        return result;            }};

0 0