百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python数组中求和问题(python 数组加数组)

off999 2024-11-06 11:22 28 浏览 0 评论

优效学院,大数据,java,人工智能,架构,等在线教育


本专题主要介绍哈希表和指针两种方法来解决该类问题,从两个数之和引申到三个数之和,再从四个数之和的问题上思考如何构建出一种通用的代码(可以解决N个数之和)。本文主要内容是通过001问题来初步了解数组求和的两种常用方法。

001-Two Sum

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例 :

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

因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

1. 暴力循环

O(n^2)

唯一需要注意的是同一个元素不能复用

2. 哈希

(1) O(n)

(2) 考虑暴力循环中我们做的事情,我们先挑出一个值a,然后看数组中其他值是否能与值a相加等于目标,也可以说成看数组中是否存在一个值等于目标值减去值a。

(3) 换个思路,我们将所有遍历过的值存放起来,每次遍历到一个新的值b时,我们可以查找目标值减去值b是否在我们存放的值中。基于哈希表的特性,查找的时间复杂度为O(1),总时间复杂度就变为了一次for循环O(n)

回到本道题中:

(1) 由于需要返回对应的索引,所以需要使用HashMap(在python中是dict),key存放数组中的值,value存放数组中的索引,遍历数组,将遍历过的值存入dict,如果目标值减去当前值在dict中则证明找到了目标值。

(2) 还有一点需要注意的是如果想按从小到大的顺序返回值,dict中存放的肯定是前一个值(因为是之前遍历过的)。

3. 双指针

(1) O(nlogn)-主要是快排的影响

(2) 在一个有序的数组中最左边一定是最小值,而最右边一定是最大值。我们可以将最小值与最大值相加与目标值进行比较,如果两数之和大于目标值,我们就让最大值小一点(也就是读取第二个最大值),相反如果小于,则让最小值大一点(读取第二个最小值)。这样我们就保证了一次循环就能查找到目标值,但数组必须是有序的。

回到题目中:

(1) 由于需要返回索引,所以我们必须存储两个数组,一个是无序的(用于查找真实的索引),另一个是有序的(用于查找符合题目的值)。

(2) 两个指针left和right分别指向数组中第一个元素和最后一个元素(最小值和最大值)

(3) 循环的结束条件为左指针大于等于右指针(左边的不能比右边的大,而且一个元素只能用一次)

(4) 然后就判断左值+右值与目标值之间的关系,在上面我们已经讨论过了大于和小于的情况。

(5) 当等于时由于我们需要得到左值和右值在原本数组的索引,我们需要考虑以下问题。从题目中的得知每个target只有一个答案, 意味着如果target是6不会出现[2, 2, 4]的情况, 但是会出现[3, 3]的情况, 也就是当两个相同的值满足情况是才会有重复的元素。所以我们先通过index获取左值对应的索引,如果左值和右值相同我们就获取下一个该值的索引,如果不同,我们直接获取右值相关的索引。

总结

通过两个数求和问题初步了解数组求和问题,下一文将引申这两种方法在三个数求和中的应用。

Python资料的私聊小编

相关推荐

qq个性签名(qq个性签名怎么看)
qq个性签名(qq个性签名怎么看)

QQ上发说说的方法1、在QQ界面点击“空间”图标。2、点击右上角的“+”按钮,点击“说说”图标。3、输入想要发送的文字,点击“发表”即可。4、总结如下。扩展资料:有趣的QQ说说推荐:1、喜欢你、是否没道理、、2、花有百样红,人与狗不同3、走...

2026-01-18 05:15 off999

office2003怎么安装(microsoft office2003怎样安装完整版)

首先,必须要确认您的win10系统中有没有安装过office。很多品牌笔记本或台式机,在购机之后,打开系统就会发现有office软件(可能需要续费后才能使用),而且版本较新。如果此时直接安装较老版本o...

租房网(租房网名怎么写吸引人)
  • 租房网(租房网名怎么写吸引人)
  • 租房网(租房网名怎么写吸引人)
  • 租房网(租房网名怎么写吸引人)
  • 租房网(租房网名怎么写吸引人)
一键root官网(一键root 官网)

卓大师的一键Root功能有三种模式,分别是获取永久Root权限,获取临时Root权限和去除Root。顾名思义,永久Root,就是一次操作,永久生效,让手机永远处于Root状态。而临时Root,在手机重...

消灭星星经典版老款(消灭星星免费下载)

《消灭星星》是由BrianBaek公司开发的一款消除类休闲娱乐手机游戏,于2014年发行,游戏大小为3.8M。本作特点是易上手,点击两个或两个以上颜色相同的方块即可消除,没有时间限制。《PopSta...

脓包痘痘如何处理(脓包痘痘怎么弄)

最好不要用手指去挤压,防止局部出现感染或者留下疤痕,在这个时候可以给局部涂抹维a酸乳膏,也可以使用硫磺皂的方法来清洗面部,并且在饮食上最好不要吃辛辣油炸的发物食品,以清淡的食物为主,多吃水果蔬菜,多喝...

德国二战游戏单机手游(以德军为视角的二战手机游戏)

元帅,私奔吧甜文穿越二战隆美尔第三帝国之未来战争帝国雄心帝国苍穹德意志的荣耀狗运战神普鲁士雄鹰战起1938复活战斗在第三帝国《我的二战不可能这么萌》作者:月面书评:异界后宫二战军事穿越流。本书...

酷我音乐官方免费下载安装(酷我音乐官方免费下载安装app)

要下载手机铃声,首先需要打开酷我音乐APP,然后点击“我的”页面,再选择“铃声中心”进入铃声下载界面。在这里,你可以根据喜好选择不同类型的铃声,比如热门、经典、儿歌等。找到心仪的铃声后,点击右侧的下载...

下载免费的小说(免费下载小说软件推荐)

http://www.ziweishuwu.comhttp://www.txtbook.com.cn/https://www.xiashutxt.com/https://www.jjxs.la/都可以...

安装播放器 app下载(安装播放器软件)

1.首先,打开浏览器,访问播放器官网,找到下载地址,点击下载。2.点击下载后,会弹出一个提示框,点击“保存”,然后把文件保存到本地磁盘。3.打开保存的文件,双击运行安装程序,按照提示安装播放器。4.安...

游戏蜂窝(游戏蜂窝免root)

人人蜂窝和游戏蜂窝有以下几点区别:1.目标用户不同:人人蜂窝是一家提供移动网络服务的运营商,主要面向一般用户提供通信服务;而游戏蜂窝是一个游戏信息平台,主要为游戏爱好者提供游戏相关资讯和社交互动。2...

正版win7旗舰版官网(win7旗舰版官方)

从来就没有win7官网这样的说法,这是因为win7本身就是微软公司旗下产品,是Windows系统的一个版本而已,并不存在win7官网,当然主要的相关资源还是可以到微软官网去查找下载。首先,官网下载的W...

打米传奇手游可提现(打米传奇手游怎么提现)

个人感觉有些传奇游戏还是可以提现的,也就是现在所谓的搬砖服,不过想要提现也是需要付出的,普通的游戏玩家一天可以得到的收益并不是很高。想要获得高额收益是需要投资的。个人建议投资之前最好先观望一下,免的造...

虚拟号码发送短信平台(虚拟手机号收短信平台)

用虚拟手机号给别人发送短信的方法如下1、下载安装定时达人软件(安卓手机端),进入首页,点击下部的“添加新任务”,左边选择“通信”项。2、这时就可以看到右边的“虚拟电话”和“虚拟短信”选项。3、点击进入...

免费阅读软件(一念永恒小说免费阅读软件)

  追书免费全本小说、追书神器免费版、易追书、全本追书阅读器等软件都是比较好用的免费读书软件。具体介绍如下:  1、追书免费全本小说,免费阅读热门网络小说;  2、追书神器免费版,有海量的书库,更...

取消回复欢迎 发表评论: