n个整数中找出连续m个数加和是最大Python版

最近在看资料时看到了一个如标题所示的面试题,面试题是Java版,正好最近在学Python,就先用Python实现了。毕竟life is short,use python(玩笑话,算法设计思路是共同的,每种语言的实现方式都大同小异)。

分析: m个连续的整数加和是最大,那么最简单的实现方式就是:从下标为0查找m个元素,依次n个数组成的容器进行遍历,每次遍历判断当前最大的m个数之和,遍历结束后返回。


#原始数据
a = (133,445,6768,23,656,12305,768,234,787,6321,5677,234,1445,3551,547,3245,12357)

def maxseq(seq,m):
    # 断言:确保形参类型准确,其中序列形式可以是列表、元组、集合形式
    assert isinstance(seq,(list,tuple,set)) and isinstance(m,int),"seq must list,tuple,set and m must int"
    assert len(seq) > m, "len(seq) must >m"

    # 将序列转化为列表
    seq = list(seq)

    # 解包的方式定义两个列表(java中的数组)容器
    #tempseq 存放临时数据,mxseq存放最大数据
    tempseq ,mxseq = [],[]

    # 取出当前的列表的长度,避免每次循环执行此方法一次,优化程序
    lens = len(seq)

    #从下标为0开始遍历
    for i in range(0,lens):

        #避免下标越界
        if (i+m) <= lens:

            #对连续的m个数进行切片,存放到临时列表
            tempseq = seq[i:i+m]

            #判断的逻辑是: 当(mxseq为空)或者(mxseq不为空并且mxseq加和小于tempseq加和)
            if (not mxseq) or (mxseq and (sum(mxseq) < sum(tempseq))):

                #mxseq改变
                mxseq = tempseq[:]
    # for循环正常结束返回mxseq
    else:
        return mxseq

print(maxseq(a,5))
注释已经写的很清楚,就不在进行详细的解释了。初学python并且对算法知识也是一知半解,如果你有好的建议,可不要吝啬哦!


你可能感兴趣的:(Python)