关于Python数组求和的四个问题及详解,让你更加爱Python
总结了四个数求和的问题及详解,如果你正在学习Python的话,可以多学习一下。
|
问题一:
专题概述
代码相关
本节的内容
通过第一个问题来初步了解数组求和的两种常用方法
Two Sum
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例 :
暴力循环
哈希
回到本道题中:
双指针
回到题目中:
总结
通过两个数求和问题初步了解数组求和问题
等下下一文将引申这两种方法在三个数求和中的应用
问题二:
专题概述
代码相关
本节的内容
一、哈希
回到题目:(将不同于之前的内容标注了新)
数组采用原地排序,不懂sort和sorted的区别,请查阅资料。结果集使用集合,题目中规定了不允许重复值得出现优化部分在上面提到了集合中存储的必须是不可变的元素(可以哈希的元素),所以我们这里选用了tuple,具体哪些是不可变的元素可以查阅资料,最常用的list是可变元素。由于题目需要不能有重复,所以存储的tuple必须按照一定顺序存放((1,2) != (2, 1)),这里采取的依然是按照从小到大的顺序。最后返回值需要返回list,leetcode才能过,虽然要求中每一项都应该是一个list,但是tuple,leetcode也能过。如过你想符合题意,可以使用list(map(list, res))还有一点需要注意本题的target是0 。
二、双指针
总结
本文将两种方法扩展到三个数的问题中
现在你应该非常清楚这两种方法的使用了
下一节我们将讨论4个数的问题
由此引出N个数的问题
问题三:
代码相关
本文的内容
018-四数之和
实例:
一、 延续三个数求和的思路
二、用双指针
这里不再讲述本方法了
相比你已经可以自行完成了
我们将主要精力放在下面的内容
推广到NSum问题
问题概述
主要需要解决三部分内容
双指针的通用性代码
哈希的通用性代码
以及嵌套for循环问题
一、前置问题
二、双指针代码
大部分代码都可以直接复制3Sum中的双指针部分区别在于,我们需要知道最左边的起始位置(left_start),以及之前所有循环对应的值(saved_items)当找到符合条件的tuple时,我们就需要存储这个tuple,在上面的问题一种我们提到了如何存储这个tuple,需要注意的是saved_items将传入一个list,我们使用*来拆包(python unpack语法,具体需要查阅相关资料)
三、哈希代码
这部分就不详细叙述了只是将上面的讲到的和3Sum代码结合一下就完成了
四、嵌套循环问题
如何嵌套执行for循环呢?
使用递归
通过start来指定起始位置
然后递归for循环
在指定一个条件结束
(例子中是start=5时)
NSum中的嵌套条件
完善for嵌套
再增加一个优化
总结
问题四:
专题概述
代码相关
本文的内容
四数相加II
例如
一、使用之前的思路(哈希)
二、本题的思路
三、优化代码-pythonic
总结
到此为止本专题的内容就结束了 ,欢迎大家在评论区发表自己的意见~
还有两道非常简单的题16和167
就不再叙说了,相信大家可以很快就解决。
|
对Python感兴趣或者是正在学习的小伙伴,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的!从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,教你如何实现边学习边用Python赚钱的学习方式。点击加入我们的 python学习者聚集地