Description
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].
Solution
- 暴力搜索:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
//simplest solution: just search
bool flag = false;
for (int i=0;i<nums.size();++i) {
for(int j=i+1;j<nums.size();++j){
if(nums[i]+nums[j]==target){
result.push_back(i);result.push_back(j);
flag = true;
break;
}
}
if(flag){
break;
}
}
return result;
}
};
- 使用Map,但是是先建立完整的Map,再索引。
#include<map>
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
//using map
std::map<int,int> value_location;
for(int i=0;i<nums.size();++i){
value_location.insert(std::pair<int,int>(nums[i],i));
}
for(int i=0;i<nums.size();++i){
std::map<int,int>::iterator tmp_it = value_location.find(target-nums[i]);
if(tmp_it != value_location.end()){
int j = value_location.at(target-nums[i]);
if(i!=j){
result.push_back(i);result.push_back(j);
break;
}
}
}
return result;
}
};
- 使用Map,但是是边建立Map,边使用已经建立好的Map
#include<map>
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
//using map
std::map<int,int> value_location;
for(int i=0;i<nums.size();++i){
if(value_location.find(target-nums[i]) != value_location.end()){
result.push_back(i);result.push_back(value_location[target-nums[i]]);
break;
}
value_location.insert(std::pair<int,int>(nums[i],i));
}
return result;
}
};