题目简介:
给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
1 2 3 4
| 给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
|
思路:
利用哈希表,每次遍历到一个元素时,首先判断target - nums[i]
是否已经在哈希表中了,如果在,则将两个下标存入结果数组中然后返回即可;如果不在,则将nums[i]
存入哈希表。
时间复杂度O(n)
。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Solution { public:
unordered_map<int, int> map;
vector<int> twoSum(vector<int>& nums, int target) { vector<int> res;
for(int i = 0; i < nums.size(); i++){
if(map[target - nums[i]] > 0){
res.push_back(map[target - nums[i]] - 1); res.push_back(i); } else map[nums[i]] = i + 1; }
return res; } };
|