我在编码竞赛网站上看到了这个问题。
假设给出了n个整数和整数k(n <= 10 ^ 5,1 <= k <= n)的数组。如何找到长度大于k的最大平均值的子阵列(连续)。
在研究论文(arxiv.org/abs/cs/0207026。)中提供了一个O(n)解决方案,链接在一个重复的SO question中。我发布这是一个单独的问题,因为我认为我有一个类似的方法,更简单的解释。您认为我的逻辑在下面的解决方案中有什么问题吗?
这是逻辑:
**我在迭代数组时计算前缀和。 i处的前缀sum是数组中前i个元素的累积和。
代码:
def findMaxAverage(nums, k):
prefix = [0]
for i in range(k):
prefix.append(float(prefix[-1] + nums[i]))
mavg = prefix[-1]/k
lbound = -1
for i in range(k,len(nums)):
prefix.append(prefix[-1] + nums[i])
cavg = (prefix[i+1] - prefix[lbound+1])/(i-lbound)
altavg = (prefix[i+1] - prefix[i-k+1])/k
if altavg > cavg:
lbound = i-k
cavg = altavg
mavg = max(mavg, cavg)
return mavg
答案 0 :(得分:4)
考虑k = 3
和序列
3,0,0,2,0,1,3
您的计划输出为1.3333333333333333
。它已找到子序列0,1,3
,但最好的子序列为2,0,1,3
,平均值为1.5
。