对于一个大小为n的数组,对于每个k从1到n,找出大小为k的连续子数组的最大和。
这个问题有一个明显的解决方案,时间复杂度为O(N2),空间复杂度为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