PythonTip--8.3
来源:互联网 发布:淘宝代付一天多少次 编辑:程序博客网 时间:2024/06/05 07:44
最大非连续子序列
题目描述: 给你一个整数list L, 如 L=[2,-3,3,50], 求L的一个非连续子序列,使其和最大,输出最大子序列的和。
这里非连续子序列的定义是,子序列中任意相邻的两个数在原序列里都不相邻。
例如,对于L=[2,-3,3,50],输出52(分析:很明显,该列表最大非连续子序列为[2,50]).
思路:
这道题用到了动态规划,具体是什么意思可以自行百度。。。贴个地址,这个讲的很不错 动态规划链接
先贴上代码然后讲讲什么意思吧
代码:
L=[2,-3,3,50]def func(L): for i in range(2,len(L)): L[i] += max(max(L[:i-1]),0) return max(L)print(func(L))
代码很短,主要就是从序列的第2个开始循环,寻找当前的索引-1之前的所有数字中最大的,如果最大的值小于0则为0,将这个最大的值加上当前值,然后赋值给当前值。
具体还是找个例子吧:
使用序列 : L = [3,5,7,-10,-2,4,6]
索引从第2开始也就是第三个数字开始:7。为什么呢?因为第一个数字前面是肯定没有数的,所以不用加,第2个数字前只有一个数,减1以后也就没有了,所以只能从第三个数字开始。
7 : 之前除了5,那最大的只有3了,所以7+3=10。序列变为L=[3,5,10,-10,-2,4,6]
继续循环:第四个数字-10:前面有5和3,最大的肯定是5了,那就变为L=[3,5,10,-5,-2,4,6]
第五个数字-2,前面有3,5,10,最大的是10,序列变为L=[3,5,10,-5,8,4,6]
第六个数字4:前面有3,5,10,-5,最大的还是10,序列变为L=[3,5,10,-5,8,14,6]
第七个数字6:前面有3,5,10,-5,8,最大的是10,序列变为L=[3,5,10,-5,8,14,16]
循环结束。
最大的数是16,看上面的循环,16=6+7+3
所以最大非连续子序列就是【3,6,7】
动态规划就是将一个大的、复杂的问题化为多个小的、简单的问题,上面就是的每一个循环其实都是求一次最大非连续子序列,第一个循环求的是序列【3,5,7】的最大非连续子序列,那肯定就是3和7了,因此就把10覆盖7,到了第二个循环,【3,5,10,-10】这个序列是不可以加上10的,因为要求非连续有了-10就不可以有7,所以不可以直接加上上一轮循环中的10,只能从3,5中挑最大的。后面同理。
不知道有没有讲清楚,以后有新的想法了再修改吧。
==============分割线================
简单题系列
这个简单题就不用什么思路了,直接贴题目和代码就好了:
题目描述: 给你直角三角形的两个直角边的边长a,b,请你求出其斜边边长,结果保留小数点后三位小数。 如a=3, b =4, 则输出5.000。
a,b = 3,4import mathdef func(a,b): print('{:.3f}'.format(math.sqrt(a*a+b*b)))func(a,b)
题目描述: 给你一个字符串列表L,请用一行代码将列表所有元素拼接成一个字符串并输出。
如L=[‘abc’,’d’,’efg’], 则输出abcdefg。
L=['abc','d','efg']print(''.join(i for i in L))
题目描述:给你一个字符串列表L,用一行代码顺序输出L中的元素,元素之间以一个空格隔开,注意行尾不要有空格,输出单独占一行。
如L=[‘abc’,’d’,’efg’], 则输出abc d efg。
L=['abc','d','efg']print(' '.join(i for i in L))
- PythonTip--8.3
- pythonTip
- PythonTip--7.31
- PythonTip--8.1
- PythonTip--8.2
- PythonTip--8.4
- PythonTip--8.5
- PythonTip--8.7
- PythonTip--8.8
- PythonTip 分解n!
- Pythontip 输出字典key
- PythonTip(1~5)题详解
- PythonTip(6~10)题详解
- PythonTip(11~15)题详解
- PythonTip(16~20)题详解
- PythonTip(21~25)题详解
- PythonTip(26~30)题详解
- PythonTip(36~40)题详解
- mysql优化之碎片整理
- 2.1.18 —线性表—Climbing Stairs
- 智能路由的思考
- JS获取客户端IP地址、MAC和主机名的方法汇总
- 第十一篇 文件的打包压缩与备份
- PythonTip--8.3
- HDU 2112 HDU Today
- CC2640R2F BLE5.0 蓝牙协议栈GAPRole 任务
- 15,SpringMVC中添加Interceptor (JavaConfig方式)
- rocketmq-remoting源码分析NettyRemotingClient
- 以太坊开发:如何在Windows下开发一个简易Dapp
- 淘宝定时任务 tbschedule实战
- IPMB接口协议总结
- HTTPS协议和原理