Code Signal_练习题_arrayMaxConsecutiveSum

本文探讨了在给定整数数组中找到某k个连续元素的最大可能和的有效算法。通过对比不同方法,如直接求和和滑动窗口法,展示了如何优化运行时间。文章最后提供了一个高效解决方案。

Given array of integers, find the maximal possible sum of some of its k consecutive elements.

Example

For inputArray = [2, 3, 5, 1, 6] and k = 2, the output should be
arrayMaxConsecutiveSum(inputArray, k) = 8.
All possible sums of 2 consecutive elements are:

    • 2 + 3 = 5;
    • 3 + 5 = 8;
    • 5 + 1 = 6;
    • 1 + 6 = 7.
      Thus, the answer is 8.

 

我的解答:

第一种:
def arrayMaxConsecutiveSum(inputArray, k):
    return max([sum(inputArray[i:i + k]) for i in range(len(inputArray))])
第二种:
def arrayMaxConsecutiveSum(inputArray, k):
    return sorted([sum(inputArray[i:i + k]) for i in range(len(inputArray))])[-1]

这两种虽然都可以运行,但是运行时间太慢了.

 

 

def arrayMaxConsecutiveSum(inputArray, k):
    # return max([sum(inputArray[i:k+i]) for i in range(len(inputArray) - k + 1)])
    # too slow, but works
    s = m = sum(inputArray[:k])
    for i in range(k, len(inputArray)):
        s += inputArray[i] - inputArray[i-k]
        if s > m: m = s
    return m
膜拜大佬

 

转载于:https://www.cnblogs.com/BlameKidd/p/9490801.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值