給定一組數字和一個數字k
,找到最大總和,以便如果您在索引i
處選擇一個數字,則不應從索引中選擇任何數字i - K
至索引i + K
。數組:找到兩個數字,使得它們的總和在一些附加條件下爲最大
這個問題是在谷歌問我的朋友。我無法找出更好的解決方案,然後是天真的O(n^2)
。
給定一組數字和一個數字k
,找到最大總和,以便如果您在索引i
處選擇一個數字,則不應從索引中選擇任何數字i - K
至索引i + K
。數組:找到兩個數字,使得它們的總和在一些附加條件下爲最大
這個問題是在谷歌問我的朋友。我無法找出更好的解決方案,然後是天真的O(n^2)
。
可以通過保持最大在所述陣列中的第一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]。
最初m應該是max(A [0]到A [k-1])? –
它會失敗的情況下:'9 0 12 200 1 9 7 2'和'k = 4' –
@anon它給出了18(從9 + 9形成) - 你認爲正確的答案應該是什麼? –