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.
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
std::unordered_map<int, int> diff_map;
int index = 0;
for(auto it = nums.begin(); it != nums.end(); it++)
{
diff_map.insert(std::make_pair(*it, index++));
}
index = 0;
std::set<int> result_index_set;
for(auto it = nums.begin(); it != nums.end(); it++, index++)
{
if(diff_map.count(target - *it) > 0 && diff_map[target - *it] != index)
{
if(result_index_set.count(index) == 0)
{
result.push_back(index);
result.push_back(diff_map[target - *it]);
result_index_set.insert(index);
result_index_set.insert(diff_map[target - *it]);
}
}
}
return result;
}
};