问题描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案
链接:https://leetcode.cn/problems/two-sum
解题思路
给定的整数数组会有两种情形:
1、nums.size() 小于 2
2、nums.size() 大于等于2
那么,我们针对以上两种情况,思考如何找到和为target的两个元素:
1、nums.size()小于2,则不存在两个和为target的元素,返回空的verctor即可
2、nums.size()大于等于2时,遍历数组nums,判断target - nums[i]的元素是否存在,如果存在,保存i和target-num[i]的index,如果不存在,将nums[i]及其index存入map中
代码实现
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
if (nums.size() < 2) {
return res;
}
int length = nums.size();
map<int, int> map_nums;
map <int, int>::iterator iter;
for (int i = 0; i < length; i++) {
if (map_nums.find(target-nums[i]) == map_nums.end()) {
map_nums.insert(map<int, int>::value_type(nums[i], i));
} else {
iter = map_nums.find(target - nums[i]);
res.push_back(iter->second);
res.push_back(i);
return res;
}
}
return res;
}
};