python列表内元素求和_关于Python数组求和的四个问题及详解,让你更加爱Python!...

总结了四个数求和的问题及详解,如果你正在学习Python的话,可以多学习一下。7b29ef6eb2dcf54bba44c3ed6fcbd44c9668c91c.jpg

|

问题一:

专题概述0408e8755f7b07f7722210ff295208df11efe693.jpg

代码相关dc85c94d8fbdc2206d9004d870b68b1cba1de598.jpg

本节的内容

通过第一个问题来初步了解数组求和的两种常用方法

Two Sum给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例 :f36aaa8e202e7e8a444d25cf23dd882f20ae9e74.jpg

暴力循环e0ef0b624e80402a39fa0b1f65b63605b7b0e1b5.jpg

哈希50205b75446950b32bc50ff56c74429242b469fa.jpg

回到本道题中:ac8144c8e76556a4e87521ae524f6a82c305c130.jpg

6abbb6b8a9030c7ebee3ca92587df7c11e4691f2.jpg

双指针

347864119bb9f48a2778df935675029f14794649.jpg

回到题目中:0b641a117f2ae302f6fbe3f1db17a70de837a75d.jpg

77a96a9f41b5d940605d65b15d88abb3301b4001.jpg

总结

通过两个数求和问题初步了解数组求和问题

等下下一文将引申这两种方法在三个数求和中的应用

问题二:

专题概述2180d715cea719e5c3c2bcc924501d175296fdef.jpg

代码相关3bd541f0963bf0d69c393921bfc12d0ec1fd93a6.jpg

本节的内容36163e65a76b3821b9c22bda967b92b704350c56.jpg

一、哈希7d652fd95d9b7002deb65ee8d59e72e39df9a795.jpg

回到题目:(将不同于之前的内容标注了新)

数组采用原地排序,不懂sort和sorted的区别,请查阅资料。结果集使用集合,题目中规定了不允许重复值得出现优化部分在上面提到了集合中存储的必须是不可变的元素(可以哈希的元素),所以我们这里选用了tuple,具体哪些是不可变的元素可以查阅资料,最常用的list是可变元素。由于题目需要不能有重复,所以存储的tuple必须按照一定顺序存放((1,2) != (2, 1)),这里采取的依然是按照从小到大的顺序。最后返回值需要返回list,leetcode才能过,虽然要求中每一项都应该是一个list,但是tuple,leetcode也能过。如过你想符合题意,可以使用list(map(list, res))还有一点需要注意本题的target是0 。fc70aad6e0a88d862755302c5104863cb88660f1.jpg

二、双指针56208ad0911dad800ae7f5cab486cb531f1f2e88.jpg

018c51bc4f600f69347d74a462a8fb4dc5de6d91.jpg

总结

本文将两种方法扩展到三个数的问题中

现在你应该非常清楚这两种方法的使用了

下一节我们将讨论4个数的问题

由此引出N个数的问题

问题三:1c7eb9ec742480e5a63f1a1c905fcb41a936c003.jpg

代码相关3bf954b2d3870a1ef580d612d8646c12f8d40206.jpg

本文的内容

018-四数之和

实例:

一、 延续三个数求和的思路

二、用双指针

这里不再讲述本方法了

相比你已经可以自行完成了

我们将主要精力放在下面的内容

推广到NSum问题

问题概述

主要需要解决三部分内容

双指针的通用性代码

哈希的通用性代码

以及嵌套for循环问题

一、前置问题

二、双指针代码

大部分代码都可以直接复制3Sum中的双指针部分区别在于,我们需要知道最左边的起始位置(left_start),以及之前所有循环对应的值(saved_items)当找到符合条件的tuple时,我们就需要存储这个tuple,在上面的问题一种我们提到了如何存储这个tuple,需要注意的是saved_items将传入一个list,我们使用*来拆包(python unpack语法,具体需要查阅相关资料)

三、哈希代码

这部分就不详细叙述了只是将上面的讲到的和3Sum代码结合一下就完成了

四、嵌套循环问题

如何嵌套执行for循环呢?

使用递归

通过start来指定起始位置

然后递归for循环

在指定一个条件结束

(例子中是start=5时)

NSum中的嵌套条件

完善for嵌套

再增加一个优化

总结f990ba10bdb263b3a8ccf688f4720a30bc031260.jpg

问题四:

专题概述9657ff590a0354fc92bc2766656062cb4e44cc78.jpg

代码相关9502495e4a88da468098a1d0915e01047d8d09d6.jpg

本文的内容3f7fe2639a34989f50c9ab96c9bdb4f8e10d360c.jpg

四数相加IIf0605c24717e99e58479b152212272ba773d308f.jpg

例如9f03ca3e368ba1ff6777850b0fdb61eb026bbf9d.jpg

一、使用之前的思路(哈希)24fca9461f19ac2ef38e78961c8cded8a5e8ba1d.jpg

cc579ad740e40edfb3bdc5ccbc0a2ef3d47949b8.jpg

二、本题的思路585b64859619292fc3f759820863778f3abd5ce8.jpg

58b58e4c336cf7252fde9c3f23051a46ad5201ed.jpg

三、优化代码-pythonicc19e5747f72e48de686db7e2d8e691d0f0280af6.jpg

ae5046fb7f36a3042c2eb8ffaf06377d05cdceb9.jpg

总结

到此为止本专题的内容就结束了 ,欢迎大家在评论区发表自己的意见~

还有两道非常简单的题16和167

就不再叙说了,相信大家可以很快就解决。

一枚Python工程师,如果你想了解Python,点击以下视频跳转链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值