题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
哈希表
每次算差值,然后在表中差有没有,有的话则为答案,没有就将元素插入表中,值为对应的索引。注意题目说了只有一种答案,所以不存在多个相同的元素。也就是测试集中不会出现 2 2 3寻找5这样的例子。(事实上哈希算出来的和官方给的答案不一样但也通过了,不一样是因为后进的元素把前面的索引覆盖了)
时间复杂度:O(n) 哈希的查找是常数级别的
空间复杂度:O(n)
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> record;
vector<int> res(2);
for(int i = 0 ; i < nums.size() ; i ++){
int complement = target - nums[i];
if(record.find(complement) != record.end()){
res[0] = record[complement], res[1]=i;
}
record[nums[i]] = i;
}
return res;
}