# 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

 

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:
[0,1]
解释:
因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:
[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:
[0,1]

 

提示:

以下错误的选项是?

## aop ### before ```cpp #include #include #include #include using namespace std; ``` ### after ```cpp int main() { Solution test; int arr[] = {3,2,4}; vector ret; vector vec(arr, arr+4); ret = test.twoSum(vec, 6); for (auto i = ret.begin(); i != ret.end(); i++) { cout << *i << ' '; } return 0; } ``` ## 答案 ```cpp class Solution { public: vector twoSum(vector &nums, int target) { vector vec; map dic; for (int i = 0; i < nums.size(); ++i) { dic[nums[i]] = i; } for (int i = 0; i < nums.size(); ++i) { if (dic.count(target - nums[i]) != 0 && dic[target - nums[i]] != i) { vec.push_back(i); vec.push_back(dic[target]); break; } } return vec; } }; ``` ## 选项 ### A ```cpp class Solution { public: vector twoSum(vector &nums, int target) { vector a; map map; for (int i = 0; i < nums.size(); i++) { map[nums[i]] = i; } for (int j = 0; j < nums.size(); j++) { if (map.count(target - nums[j]) == 1 && map[target - nums[j]] != j) { a.push_back(j); a.push_back(map[target - nums[j]]); return a; } } return a; } }; ``` ### B ```cpp class Solution { public: vector twoSum(vector &nums, int target) { vector a; map map; for (int i = 0; i < nums.size(); i++) { if (map.find(target - nums[i]) != map.end()) { a.push_back(map[target - nums[i]]); a.push_back(i); return a; } else { map[nums[i]] = i; } } return a; } }; ``` ### C ```cpp class Solution { public: vector twoSum(vector &nums, int target) { vector a; for (int i = 0; i < nums.size(); i++) { for (int j = i + 1; j < nums.size(); j++) { if (nums[i] + nums[j] == target) { a.push_back(i); a.push_back(j); return a; } } } } }; ```