サイズ 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) + 追加メモリ。
関連トピック: