indices
exactly
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
UPDATE (2016/2/13):
The return format had been changed to zero-based
方法一:
存到一个hash表中,判断target-nums[i]是否在表中。
时间和空间复杂度都是O(N)
class Solution {
public:
  vector<int> twoSum(vector<int>& nums, int target) {
    vector<int> res;
    int len = nums.size();
    unordered_map<int,int> m;
    for (int i = 0; i < len; i++){
      if (m.count(target - nums[i])){
        res.push_back(i);
        res.push_back(m[target - nums[i]]);
        return res;
      }
      m[nums[i]] = i;
    }
    return res;
  }
};方法二
 
先排序,在用 双指针夹逼求出两个值。
 
注意需要记录原来的索引
 
class Solution {
public:
  struct cmp{
    bool operator()(const pair<int,int>&a,const pair<int,int>&b)const{
      return a.first < b.first;
    }
  };
  vector<int> twoSum(vector<int>& nums, int target) {
    vector<pair<int, int> >newNums;
    for (int i = 0; i < nums.size(); i++){
      newNums.push_back({ nums[i], i });
    }
    sort(newNums.begin(), newNums.end());
    vector<int> res;
    int pa = 0, pb = newNums.size() - 1;
    while (pa < pb){
      if (newNums[pa].first + newNums[pb].first == target){
        res.push_back(newNums[pa].second);
        res.push_back(newNums[pb].second);
        return res;
      }
      else if (newNums[pa].first + newNums[pb].first < target){
        pa++;
      }
      else{
        pb--;
      }
    }
    return res;
  }
};









