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.
Example:
Given nums = [2, 7, 11, 15], target = 9
Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].
Answer:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
int m_count = nums.size();
int m_target = target;
if (m_count < 2){
return result;
}
if (m_count == 2){
if((nums[0] + nums[1]) == target)
{
result.push_back(0);
result.push_back(1);
return result;
}
else{
return result;
}
}
int m_min = nums.at(0);
int m_max = nums.at(0);
for (int index = 1;index < m_count;index++){
if(nums[index] > m_max){
m_max = nums[index];
continue;
}
if(nums[index] < m_min){
m_min = nums[index];
}
}
map<int,map<string,int>> m_flagMap;
for (int index = 0;index < m_count;index++){
m_flagMap[nums[index]]["bool"] = 1;
m_flagMap[nums[index]]["count"] ++;
m_flagMap[nums[index]]["index"] = index;
}
for (int index = 0;index < m_count;index++){
int m_sub = m_target - nums[index];
map<string,int> indexMap = m_flagMap[m_sub];
if(indexMap["bool"] == 1 && indexMap["index"] != index){
result.push_back(index);
result.push_back(indexMap["index"]);
break;
}
}
return result;
}
};