給定大小爲n的數組對於從1到n的每個k,求大小k的連續子數組的最大總和。對於每個k = 1的所有大小爲k的子陣列的最大總和爲n .. n
此問題具有時間複雜度O(N )和O(1)空間的明顯解決方案。 Lua代碼:
array = {7, 1, 3, 1, 4, 5, 1, 3, 6}
n = #array
function maxArray(k)
ksum = 0
for i = 1, k do
ksum = ksum + array[i]
end
max_ksum = ksum
for i = k + 1, n do
add_index = i
sub_index = i - k
ksum = ksum + array[add_index] - array[sub_index]
max_ksum = math.max(ksum, max_ksum)
end
return max_ksum
end
for k = 1, n do
print(k, maxArray(k))
end
是否有任何算法具有較低的時間複雜度?例如,O(N log N)+附加內存。
相關信息:
對於每個'k = 1,....,n',這是'O(n^2logn)'。低於OP的解決方案。使用滑動窗口在O(n)中完成k個相鄰元素的最高總和。不需要'O(nlogk)'樹解決方案。 – amit
-1。我可以解決O(N)中固定k的子問題。問題的關鍵在於對於從1到n **的每個k,需要最大總和的k-子陣列**。 – starius