[LeetCode]1 - Two Sum(easy) - python

problem description:

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.
在这里插入图片描述

思路

思路一:
我们可以将题目转化为:两个相同的列表里的元素分别相加,然后遍历所有的结果值, 如果结果值与目标值(target)相同,并且此时对应两个列表里的两个元素下标不同 ,则返回这两个下标。

代码:
在这里插入图片描述
缺陷:

由于使用了双层for循环,导致时间复杂度极差,因此一般少用双循环
在这里插入图片描述

思路二
上面思路一用的是加法的思想。我们可以稍微拐个弯,考虑是否可以从减法的角度考虑。列表中两数之和为目标值,也可以说成: 目标值减去列表中的一个数,得到的结果是否仍在列表中可以找到。

具体手法是:我们可以建立一个空字典,用来存放目标值减去列表中元素得到的结果,我们可以简单理解为列表关于目标值的补集。字典中的键对应的是原列表中的数值关于目标值的补集,字典中的值对应原列表中的下标。

每次我们都判断一下列表中的元素是否在字典中。如果在,则说明列表前面某一个元素和此时判断的元素的和为目标值,只需返回这两个元素的下表即可;如果不在,就把该元素的补集加入到字典中,供后面的元素对比。

代码:
在这里插入图片描述

分析:

由于只使用了一层循环,我们可以看到算法的时间复杂度大大简化
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Arno_Pei/article/details/88014996