给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
一如之前的那样还是哈希表。先把数组所有元素以[ num[i] , i ]的形式存入哈希表,然后通过循环里访问(target-key)看看是否能在map里访问到(访问到的两点要素:①find()结果不为end(),②find()结果不为key本身),把访问到的value返回,就能给出两数之和。
不过实际操作起来遇到了一些坑。
在向map添加元素时,用了Insert没有用下标法,导致遇到重复的key值,value没法更新。
numMap.insert(pair<int,int>(nums[i], i)); //举例 [3,2,3] target=6
放代码:
public: vector<int> twoSum(vector<int>& nums, int target)
{
unordered_map<int,int> numMap;
const int len=nums.size();
int i=0;
for(;i<len;i++)
{
numMap[nums[i]]=i;
}
i=0; //之前将i赋值为0写在下面for循环体条件内结果有个例子一直过不了
for(;i<len;i++)
{
if(numMap.find(target-nums[i])!=numMap.end()&&numMap[target-nums[i]]!=i) {
break;
}
}
return {i,numMap[target-nums[i]]};
}