# 力扣 ## 简单 ### 两数之和 > 给定一个整数数组 `nums` 和一个整数目标值 `target`,请你在该数组中找出 和为目标值 `target` 的那 两个 整数,并返回它们的数组下标。 > > 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 ```shell 示例 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] ``` **题解** 双指针解法 > 标准的双指针写法 利用两层循环来暴力全部试过 `3004 ms` `15.3 MB` ```python class Solution(object): def twoSum(self, nums, target): for i in range(len(nums)): for j in range(i+1,len(nums)): if nums[i] + nums[j] == target: return [i,j] ``` > 本质依旧是双指针法 只不过用in方法代替了一次循环 而且 直接寻找目标而不是全部试一次 `408 ms` `15.3 MB ` 同时可以看出 `in` 方法是很高效的 ```python class Solution(object): def twoSum(self, nums, target): for i in range(len(nums)): num = nums.pop(0) if target - num in nums: return [i, nums.index(target - num)+i+1] ``` 哈希解法 > 首先我们循环一遍数组 来检查与目标只差在没在哈希表里 如果在就说明是我们的目标元素 因为只循环了一遍所以 不存在重复的问题 ```python # 很标准的写法 也不知道为什么会有那么多其他的写法 # 20 ms 15.8 MB class Solution(object): def twoSum(self, nums, target): dct={} # 用于存放数据 以数组里的元素为键索引为值 for i,n in enumerate(nums): a=target-n # 如果是的话另一个元素应该是什么 # 如果这里用get方法 时间会变成 32 ms 15.7 MB if a in dct: # 查看是否在哈希里 return [dct[a],i] # 如果在直接返回就可以了 else: dct[n]=i ```