2021秋招字节跳动测试工程师 笔试

求最大子序列的和

题目描述: 输入M代表原始的一个序列的长度,输入N代表代表复制M的次数,组成一个新的长序列,顺序不能改变。从新的长序列中找出连续的子序列,使得这个子序列的和最大。

示例

输入:

N = 5 M = 3
arr = [1,3,-9,2,4]

输出:

11

其中,将arr复制3次,得到新的长序列为:

[1, 3, -9, 2, 4, 1, 3, -9, 2, 4, 1, 3, -9, 2, 4]

代码:

class Solution:
    def xulie(self, N, M, num):
        t = num[:]
        for i in range(M - 1):
            num.extend(t)
        print(num)
        max_sum = num[0]
        a_sum = max_sum
        for i in range(1, len(num)):
            a = num[i]
            a_sum = max(a, a_sum + a)
            max_sum = max(max_sum, a_sum)
        return max_sum

if __name__ == '__main__':
    print('N = ')
    N = int(input())
    print('M = ')
    M = int(input())
    #arr = input("")
    #num = [int(n) for n in arr.split()]
    num = [1,3,-9,2,4,]
    w = Solution()
    res = w.xulie(N, M, num)
    print('result = ', res)
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值