数组:找到两个数字,使得它们的总和在一些附加条件下最大

时间:2013-01-22 15:56:48

标签: arrays algorithm data-structures

给定一组数字和数字k,找到最大总和,这样如果您在索引i选择一个数字,则不应从索引i - K中选择任何数字来索引i + K

谷歌向我的朋友询问了这个问题。我无法找到比天真O(n^2)更好的解决方案。

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)