给定一个整数数组 nums
和一个目标数字 target
,要求返回数组中两个数字的下标,且这两个数字加起来等于目标数字 target
python
你能够假设每组输入将会有一个解决方案,且数组中同一个数字只能使用一次数组
例子:bash
输入 nums = [2, 7, 11, 15], target = 9,
由于 nums[0] + nums[1] = 2 + 7 = 9,
因此 return [0, 1]。
复制代码
Easy
数据结构
指望遍历一遍数组,就能够找到两个符合条件的数字,遍历过程当中,每读到一个数字,须要完成两个动做:ui
能够看到「补数集合」是这里的关键,它要以尽量快的速度完成:spa
这两个操做。.net
而咱们都知道,对于这种需求,有一种数据结构能够达到 的时间复杂度,那就是哈希表,说到这里,咱们就能够动手写代码了:code
class Solution(object):
def twoSum(self, nums, target):
complements = {}
for i, x in enumerate(nums):
if target - x in complements:
return [complements[target - x], i]
complements[x] = i
复制代码
以上,complements
是咱们的「补数集合」,在 Python 中,字典(dict)数据结构就是用哈希表实现的,因此这里 complements
就定义为一个字典。leetcode
第 4 行咱们依次遍历数组get
第 五、6 行用来判断当前数的「补数」是否存在,若是存在则返回「补数」所在的下标和当前数的下标
第 7 行是在「补数」不存在的状况下,将当前数做为其余数的「补数」,连同下标一块儿插入到「补数集合」中
因而,上面代码就实现了经过遍历一次数组,就能够找到符合条件的两个数的下标,时间复杂度为 。