给定大小为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