原标题:Python面试:两数之和

如果你正在准备编程面试,那么你肯定会在某个面试时刻遇到两数之和的问题:

给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

尽管这是一个看似简单的问题,但是你可以采取多种方法,每种方法都有自己的优点和缺点。

方法一:基本方法

只需遍历所有可能的数字对,然后返回第一对,它们的总和就是你想要的。

这种方法在O(n²)时间和O(1)的空间中运行,其中n是arr的长度。

方法二:优化时间

第二种方法通过使用额外的空间来提高时间复杂度。

首先初始化一个空映射,它将用于存储之前的元素及其索引。

然后,对于列表中的每个元素,首先通过检查sum val-current是否在映射的键集中,来检查之前是否遇到过sum val-current。如果是,那么你已经找到了所需的对,因current_element + (sum_val - current_element) == sum_val。

否则,将current_element添加到映射中,然后移动到下一个元素。

这种方法在O(n)时间和O(n)空间中运行。在这里,我们只访问每个数组元素一次,因为我们将以前看到的元素及其索引缓存在映射中。

方法三:优化空间

最后一种方法在不使用额外空间的情况下提高了时间复杂度,但是仍然比方法2使用更多的时间。

在这种方法中,我们首先对数组进行排序,并使用排序数组的属性来提高时间复杂度,而不需要使用辅助空间。

为此,我们将使用一个双指针方法。我们在第一个元素处开始一个指针,在最后一个元素处开始第二个指针。然后检查指针所指向的两个元素的和。

如果和太大,则递减第二个指针,如果和太小,则递增第一个指针。

因为数组是排序的,所以我们可以保证数组是不会减少。

这种方法在O(n*log(n))时间和O(1)空间中运行。这里我们假设使用的排序方法在O(n*log(n))时间和O(1)空间中运行,比如堆排序。

请注意,此方法的运行时中的主要因素来自排序操作。之后只进行O(n)比较,因为指针每次移动1,直到它们重叠为止。

在这里,我们改进了基本方法的时间复杂度,而不需要像方法2那样使用额外的存储。我们可以利用数组已排序的事实来最小化我们必须进行的比较的数量。返回搜狐,查看更多

责任编辑:

python两数之和是多少_Python面试:两数之和相关推荐

  1. python两个列表的差集_Python求两个list的差集、交集与并集的方法

    本文实例讲述了Python求两个list的差集.交集与并集的方法.分享给大家供大家参考.具体如下: list就是指两个数组之间的差集,交集,并集了,这个小学数学时就学过的东西,下面就以实例形式对此加以 ...

  2. python如何对两个矩阵进行拼接_Python:合并两个numpy矩阵的实现

    Python:合并两个numpy矩阵的实现 numpy是Python用来科学计算的一个非常重要的库,numpy主要用来处理一些矩阵对象,可以说numpy让Python有了Matlab的味道. 如何利用 ...

  3. python求两数之和的命令_python计算两个数的百分比方法

    工作中遇到了要计算两个数百分比的问题,python 2.7 环境. 代码: #!/usr/bin/env python #function: 计算百分比 #USAGE: python calculat ...

  4. python计算两字符串中的位置_Python计算两个特定字符串之间的字符数

    我做了一个包含随机碱基序列(ATCG)的文本文件,希望在这些序列中找到最长和最短的"阅读帧".在 我能够用"searchfile"和for循环识别起始密码子和停 ...

  5. python多线程内存越要越大_Python 面试:这9个问题你一定要掌握!

    作为一个程序员,可能或多或少经历过一些技术面试,有些是编程语言本身的问题,有些是跟工程相关的问题. 笔者自己被面试过或者面试过别人,今天我们来总结关于Python程序员面试的时候经常被问到的9个问题, ...

  6. python怎么进行同或函数_Python面试宝典之基础篇-03

    题目011:Python中为什么没有函数重载?点评:C++.Java.C#等诸多编程语言都支持函数重载,所谓函数重载指的是在同一个作用域中有多个同名函数,它们拥有不同的参数列表(参数个数不同或参数类型 ...

  7. python 有放回随机抽取_Python面试宝典之基础篇-08

    原标题:Python面试宝典之基础篇-08 题目36:如何使用random模块生成随机数.实现随机乱序和随机抽样? 点评:送人头的题目,因为Python标准库中的常用模块应该是Python开发者都比较 ...

  8. python中db是什么意思_Python面试-DB相关

    昨日回顾: 面试 Python综述 设计哲学 版本变迁及发展 GIL 内存管理及垃圾回收 并发并行 昨日作业一:Python是否存在内存泄露 作业二:过往的项目中有没有出现过性能问题? 作业三:什么是 ...

  9. python如何对两个矩阵进行拼接_Python合并两个numpy矩阵

    numpy是Python用来科学计算的一个非常重要的库,numpy主要用来处理一些矩阵对象,可以说numpy让Python有了Matlab的味道. 实际的应用中,矩阵的合并是一个经常发生的操作,如何利 ...

  10. python怎样把两个图画到一起_python实现两张图片拼接为一张图片并保存

    本文实例为大家分享了python实现两张图片拼接为一张图片并保存的具体代码,供大家参考,具体内容如下 这里主要用Python扩展库pillow中Image对象的paste()方法把两张图片拼接起来 f ...

最新文章

  1. 北大研究人员这次发现了AI「躺平」原因,都是数据集的错!
  2. 解析php.ini 中文版
  3. URAL 1471 Tree
  4. Android控件的继承关系图
  5. Android Java包
  6. poi实现Excel导入导出依赖
  7. LeetCode 57. 插入区间(一次遍历)
  8. 企业实战(Jenkins+GitLab+SonarQube)_11_Jenkins权限的划分
  9. [转载] 列表、元组及通用序列操作
  10. 【Java】浅析Math类
  11. Unity的camera组件
  12. Google的wiki-map也上线了
  13. [Axis2与Eclipse整合开发Web Service系列之一] 生成Web Service Client(将WSDl 转化成 Java代码)
  14. 专技岗位计算机应用,曲靖市麒麟区白石江街道社区卫生服务中心 2019年招聘人员岗位表...
  15. 《PWM整流器及其控制》读书笔记—第三章—电压型PWM整流器
  16. 《互联网的那些事之时代》第二回:春江潮水连海平,海上明月共潮生
  17. mysql连接timeout_mysql 连接超时wait_timeout问题解决
  18. android usb dwc3 gaget rndis 网卡异常断开问题。
  19. excel自动恢复文档被关闭或者误删除
  20. 神经网络中前向传播和反向传播解析

热门文章

  1. 课后作业1:字串加密
  2. 17.1.1 How to Set Up Replication 设置复制:
  3. 关于Java的权限修饰符(public,private,protected,默认friendly)
  4. Oracle中connect by...start with...的使用
  5. [导入]关于“啸聚一庐--txna”
  6. Python代码刷博客访问量
  7. 【笔记】VUE学习笔记
  8. Sentinel数据处理-基于snap软件
  9. dataframe数据按行做线性拟合
  10. Fragstats 4 软件进行景观分析教程