numpy数组某一行求和 python_关于Python数组求和的四个问题及详解,让你更加爱Python!...

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

c63288fd405e03f38ecc396694b45b71.png


|
问题一:专题概述

5efe67f4a5f0229e4113ff9d783608ee.png

代码相关

54290b8f441545ab6ae1524634796dc9.png


本节的内容
通过第一个问题来初步了解数组求和的两种常用方法
Two Sum
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例 :

c0a984dbe265e4b118380206548599f2.png


暴力循环

d72a854b7afc68b320ce2c7105c63a43.png


哈希

13772caa6f265d6042db630edd09a1da.png


回到本道题中:

8cb049aaf21d1a10e1f0147bafdf04cf.png

399ac54e8f362b6f14e2800bbf079cee.png


双指针

18d332d13ce2ae627a8afe75e783b8ed.png


回到题目中:

0fe94e0891c52a54b10af87e85dd25b2.png

d03fe15c6d9dfabf3ec1fca86b13c995.png

总结
通过两个数求和问题初步了解数组求和问题
等下下一文将引申这两种方法在三个数求和中的应用
问题二:
专题概述

55760d7410f3b4881c6468fcfe738b16.png


代码相关

28770207d8e946645302333856e6b07b.png


本节的内容

6e93fc39f8adc48259f695d1f2b1e409.png


一、哈希

c576af3b38845fa6c44b43b0fcaeab3e.png


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

b2a29475375e454b54d5684254f0cac2.png


二、双指针

d34dff791085b022e7f73fe8eb95bb25.png

735780429a4a2610a0868771b3e7a99b.png

总结
本文将两种方法扩展到三个数的问题中
现在你应该非常清楚这两种方法的使用了
下一节我们将讨论4个数的问题
由此引出N个数的问题
问题三:

d8c7c7622dc6e43869f7aa5e10d7796b.png

代码相关

a5f47df924ef6bb0a6241a7f2836e30b.png

本文的内容

89bd7eb6effd44efe54ed244a5832262.png


018-四数之和

a3685e50519fbd5f4ec9f83cd4d32d45.png


实例:

c067237b9962045b3e623c9a38b10b8d.png


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

7926da309a21467a60ab9c3cae427fb2.png

d065e7fd9a64048a67023713408acc00.png


二、用双指针
这里不再讲述本方法了
相比你已经可以自行完成了
我们将主要精力放在下面的内容推广到NSum问题
问题概述
主要需要解决三部分内容
双指针的通用性代码
哈希的通用性代码
以及嵌套for循环问题
一、前置问题

6b4e10f7c686adf6275dbefc11f2825d.png


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

81c9540a66da928b5e66110f7a60846f.png


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

54b21956c641430d1af289aa29ad6898.png


四、嵌套循环问题
如何嵌套执行for循环呢?
使用递归
通过start来指定起始位置
然后递归for循环
在指定一个条件结束
(例子中是start=5时)

c00155ea840d89ce08b7c9c80f07cb18.png


NSum中的嵌套条件

7f8ca91cdbbb241f8b7935001874af02.png

8b39a700270cf82919878212b25905f4.png


完善for嵌套

fc3ccbd60bd20facbe2ad400838e2d51.png

0fa85353576f1645e7cbc47c589ae326.png


再增加一个优化

cd7a38285134e4602c2fd231b9115441.png

b0ed62f391110a72352597a778383cd0.png

总结

e6166f6c18e76940877268bdc32f7448.png


问题四:专题概述

bc86a58b4d3aca746385ef8524d67b43.png

代码相关

807b1b30b1b4d0d04a83bf62b783e528.png

本文的内容

9aa879205ef0b0e4a96c71535fee8533.png

四数相加II

3d9ebc9b2ffa0505ad5c8758e3261dd7.png


例如

69511c78ad5b543934b9f9359c9eaa41.png


一、使用之前的思路(哈希)

821bd259d04fde7ca8fea5bff70c2c6c.png

10a69b7e81cf3b02ac06d71f6611a823.png


二、本题的思路

91bffa7effa995dd1b2f3b7a00b7b374.png

78a92cf2c44818ebca6d9a045f5f1473.png


三、优化代码-pythonic

1ecd3d83d0cc10b69b9576ebe162d3b9.png

29d866623d047477fddb82fec7129ffb.png

总结


到此为止本专题的内容就结束了 ,欢迎大家在评论区发表自己的意见~
还有两道非常简单的题16和167
就不再叙说了,相信大家可以很快就解决。

成长离不开与优秀的同伴共同交流,如果你需要好的学习环境,好的学习资源,这里欢迎每一位热爱Python的小伙伴

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值