给定一组数字和数字k
,找到最大总和,这样如果您在索引i
选择一个数字,则不应从索引i - K
中选择任何数字来索引i + K
。
谷歌向我的朋友询问了这个问题。我无法找到比天真O(n^2)
更好的解决方案。
答案 0 :(得分:4)
您可以通过跟踪数组中第一个i-K-1条目中看到的所有值的最大值,在O(n)中执行此操作。
Python代码:
A=[3,9,10,3,6,7,1,5]
K=2
m=A[0]
bestsum=0
for i in xrange(K+1,len(A)):
m=max(A[i-K-1],m) # stores maximum of values in A[0],A[1],...,A[i-K-1]
bestsum=max(bestsum,A[i]+m)
print bestsum
对于每个索引,我们将A [i]与m组合,m是在数组A [0],..,A [i-K-1]的初始值中看到的最高值。
答案 1 :(得分:-1)