delphi7存储过程传入数组_关于Python数组求和的四个问题及详解,让你更加爱Python!...

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

4527032166911868df5124a2073b3c74.png


|
问题一:专题概述

3969a04b3b9028e40680fe34a28b975d.png

代码相关

190822389ebe96d9674069a5b9ea601d.png


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

993aa66e7ca605cce11bb1d87590503b.png


暴力循环

dc07222602d6050033053c06aacdb6e1.png


哈希

7ff15bf0149b4c255201ae6c91488e07.png


回到本道题中:

f0e7cf18c6edcc07bd7d1ac750d3ef66.png

aa234a25cdc368935a2866d05c1f83ed.png


双指针

5c208a6c16ab1c7fda587518d3ab6155.png


回到题目中:

a98069b2258d48a17f59a206555d57b3.png

6719260af19670685aabc20eabfc4f32.png

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

cf97430c4228b8867237a7fe8a29f204.png


代码相关

3aef8d947e2741d28c96bccb48f8b9f0.png


本节的内容

a660b460659fd1beebbd3615ab14a4dd.png


一、哈希

510b2884043e28b558b71cb337c625ce.png


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

6890698ecabd5d19bfefc178ccc7d21f.png


二、双指针

cd4a298568fba47c671e70faa1756a28.png

f4886cb07682f5953fbbcc52d25c51b1.png

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

73ef9dc322fdb27f5ca1a61aba61d9dd.png

代码相关

2faab8e4afc4ff183cd647b61b40465b.png

本文的内容

aa04eb03e53d51b5652d2cb18aed0002.png


018-四数之和

aa42da9c17c55cf6153c393dbc18e713.png


实例:

d23819e6de7afa31cb04be30d0e1f93e.png


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

69e0cbac26328b9ba76272fffcd155e7.png

d3c0fd8efeaad7dec603e09c915f000d.png


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

197400e46eb7ae5b6af8129427612f5a.png


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

27ac19abdd7de96a68cc1b0e834ea6b2.png


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

b917b510b5a4330744dcd37bf9aa4504.png


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

1f2d75f4c7960ec566abdb2bc86ca1c2.png


NSum中的嵌套条件

5f9f2613703a75bd85d3942ee1b6b190.png

4bbdb3955f175ed1cc368268ce309eb0.png


完善for嵌套

6debbac3f91b6ca0b9734f92d49283ad.png

a381d47200fc564b706e1fbf9ef2f894.png


再增加一个优化

24a243b685926b9c3830ff0b811fe97e.png

b7f5227481fec997dd1b4555b6d1b5ac.png

总结

3ba789b29014756ea15c6f96f957c6a2.png


问题四:专题概述

f0a96f307a60e27b00fccb6b560506fb.png

代码相关

d42a9d3700c17ce4a898b5a336a52427.png

本文的内容

13520cbdd4052fd6722b446871f81abd.png

四数相加II

68ee4beab382d49e266cbd2177bfe679.png


例如

71773c803d2467266815b1118aed537c.png


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

e39771372012146e9e54a87fc6b83aee.png

c45082013d830392152a581557efed8c.png


二、本题的思路

bedd6388b611a1bcb4839ba1313db1f6.png

5c31d229630e30100827a69f267de36a.png


三、优化代码-pythonic

0880cbf16c065cdad92e7ed6167b4532.png

03a0547c6d410848b09890944caa6ece.png

总结


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

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值