2013-01-22 39 views

回答

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 

對每個i我們結合索引A [1],其中m是在所述陣列A [0],...,A [IK的初始值看到的最高值-1]。

+0

最初m應該是max(A [0]到A [k-1])? –

+0

它會失敗的情況下:'9 0 12 200 1 9 7 2'和'k = 4' –

+0

@anon它給出了18(從9 + 9形成) - 你認爲正確的答案應該是什麼? –

-1
+1

該問題要求** 2個數字**。它不是子集總和,你不希望總和爲'k'的子集,你需要2個數字的最大和,並且限制它們的差值大於'k'。 – amit

+0

@amit沒有區別它是指數差異如果我是指數然後它不應該在(i-k,i + k) – Peter

+0

哦,我明白了。儘管如此,仍然不是子集總和。 – amit

相關問題