给定一个大小为 n 的数组,对于从 1 到 n 的每个 k,找到大小为 k 的连续子数组的最大和。
这个问题有一个明显的解决方案,时间复杂度 O(N 2 ) 和 O(1) 空间。卢阿代码:
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) + 额外的内存。
相关话题: