![104b331ece0035d9668f8b3fcff23fff.png](https://i-blog.csdnimg.cn/blog_migrate/56ab2c66c808a99d03a41768df3a0af7.jpeg)
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
方法1:暴力法
暴力法很简单,遍历每个元素 x,并查找是否存在一个值与 target - x 相等的目标元素。
class Solution { ector twoSum(vector& nums, int target) { for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j < nums.length; j++) { if (nums[j] == target - nums[i]) { return new int[] { i, j }; } } } }}
![3f5017d52b6f72e0cdc04a7ad068597d.png](https://i-blog.csdnimg.cn/blog_migrate/638f57df0add4cae6f6d47e35daffd83.jpeg)
![c26ea8a9c2ff8f3070f7d520000bd8e0.png](https://i-blog.csdnimg.cn/blog_migrate/caaad5d85f217ea08dc665016c11c963.jpeg)
方法2:哈希表
在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。
class Solution {public: vector twoSum(vector& nums, int target) { std::unordered_map numT; for(int i = 0; i < nums.size(); i++) { if(numT.find(target - nums[i]) != numT.end()) { return {numT[target - nums[i]], i}; } numT[nums[i]] = i; } return {}; }};
![51cec3045c1ac5dd1f9a30bf9100524e.png](https://i-blog.csdnimg.cn/blog_migrate/2adf2129af76a674e0354ff313bb1cd3.jpeg)
![2cedc94d98529dfbb1e7872c4334351e.png](https://i-blog.csdnimg.cn/blog_migrate/27517e9f4e15c9b00bbdb96f0ce23d3e.jpeg)