应用题-哈希表-两数之和 ( 需要特别注意一下 )
注意点:
**什么时候使用哈希法?**当需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,第一时间想到哈希法。
本题需要特别注意的,题目中的限制条件,`不能使用两次相同的元素`(说的是nums[i]只能使用一次),`每种输入只会对应一个答案`。正是因为有这样的显示条件在,所以初始化index_map时,不是预先初始化好,而是过程中慢慢去初始化。
- 比如`nums = [3,3], target = 6`如果预先就初始化好了,就发现x对应的y可能是本身,不符合题目。
```python
class Solution:
# 给定一个整数数组nums和一个整数目标值target,
# 请在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
# 假设每种输入只会对应一个答案,并且不能使用两次相同的元素。
def twoSum(self, nums: List[int], target: int) -> List[int]:
# target = x + y,
# for x in nums -> 查找y
index_map = dict()
for i, x in enumerate( nums ):
# 边完善index_map 边寻找y
# 这样可以保证[3,3] target=6的测试数据不会找到自身,并且不能使用两次相同的元素。
y = target - x
if y in index_map:
return [ i, index_map[ y ] ]
else: index_map[ x ] = i
return []
```