[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循环,导致时间复杂度极差,因此一般少用双循环
在这里插入图片描述

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

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

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

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

分析:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值