Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
//method1: class Solution{ public: vector<int> twoSum(vector<int>& nums, int target){ unordered_map<int,int> m; vector<int> res; for(int i = 0; i < nums.size(); ++i){ m[nums[i]] = i; } for(int i = 0; i < nums.size(); ++i){ int t = target - nums[i]; if(m.count(t) && m[t] != i){ res.push_back(i); res.push_back(m[t]); break; } } return res; } }; //method2: class Solution2{ public: vector<int> twoSum(vector<int>& nums, int target){ unordered_map<int,int> m; for(int i = 0; i < nums.size(); ++i){ if(m.count(target - nums[i])){ return {i,m[target - nums[i]]}; } m[nums[i]] = i; } return {}; } };
方法3:
#include <iostream>
#include <vector>
#include <map>
#include <unordered_map>
using namespace std;
class Solution{
public:
vector<int> twoSum(vector<int>& nums, int target){
vector<int> res;
unordered_map<int,int> map;
for(int i = 0; i < nums.size(); i++)
{
map[nums[i]] = i;
}
for(int i = 0; i < nums.size(); i++)
{
int left = target - nums[i];
if(map.count(left) && i < map[left])
{
res.push_back(i);
res.push_back(map[left]);
}
}
}
};