Python语言描述最大连续子序列和
求最大连续子序列的和是一个很经典很古老的面试题了,记得在刚毕业找工作面试那会也遇到过同款问题。今儿突然想起来,正好快到毕业季,又该是苦逼的应届生们各种面试的时候到了,就给写了一些小代码解决这个问题。也希望各位找工作的同志们都拿到心目中理想的offer,从此以后,战胜高富帅,赢取白富美,走上人生巅峰。
1.问题描述
假设有一数组(python里为list啦)[1,3,-3,4,-6,-1],求数组中最大连续子序列的和。例如在此数组中,最大连续子序列的和为5,即1+3+(-3)+4=5
2.O(n2)的解法
最简单粗暴的方式,双层循环,用一个maxsum标识最大连续子序列和。然后每次判断更新。没有太多可以说的,直接上代码
defmaxSum(list): maxsum=list[0] foriinrange(len(list)): maxtmp=0 forjinrange(i,len(list)): maxtmp+=list[j] ifmaxtmp>maxsum: maxsum=maxtmp returnmaxsum if__name__=='__main__': list=[1,3,-3,4,-6] maxsum=maxSum(list) print"maxsumis",maxsum
运行结果
maxsumis5
3.O(n)解法
在任何讲动态规范的地方都能找到求最大连续子序列和的例子。具体来说,假设数组为a[i],因为最大连续的子序列和必须是在位置0-(n-1)之间的某个位置结束。那么,当循环遍历到第i个位置时,如果其前面的连续子序列和小于等于0,那么以位置i结尾的最大连续子序列和就是第i个位置的值即a[i]。如果其前面的连续子序列和大于0,则以位置i结尾的最大连续子序列和为b[i]=max{b[i-1]+a[i],a[i]},其中b[i]就是指最大连续子序列的和。
defmaxSum(list_of_nums): maxsum=0 maxtmp=0 foriinrange(len(list_of_nums)): ifmaxtmp<=0: maxtmp=list_of_nums[i] else: maxtmp+=list_of_nums[i] if(maxtmp>maxsum): maxsum=maxtmp returnmaxsum if__name__=='__main__': list_of_num=[1,3,-3,4,-6] maxsum=maxSum(list_of_num) print"maxsumis:",maxsum
运行结果
maxsumis5
总结
以上就是本文关于Python语言描述最大连续子序列和的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:
Python生成数字图片代码分享
python数字图像处理之高级滤波代码详解
python+mongodb数据抓取详细介绍
如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!