我知道如何在O(n)中找到数组的最大连续子数组。 但是,以下链接中的第二个问题要求在可以消除某些元素(k)时找到最大的连续子数组: http://www.iarcs.org.in/inoi/2011/inoi2011/inoi2011-qpaper.pdf 我似乎无法找到一种有效的方法。
答案 0 :(得分:2)
考虑到我认为做O(N ^ 2)解决方案的限制。我不会告诉你如何解决问题,但会给你一些提示:
希望这可以帮助您解决问题。
答案 1 :(得分:1)
有一个O(N.K)动态编程解决方案:
让d[i][j]
(0 <= i
&lt; = N,0&lt; = j
&lt; = K)是任何(可能为空的)子数组结尾的最大总和通过消除i
元素,使用j
元素。
初始值:
d[0][j] = 0
代表0&lt; = j
&lt; = K
更新动态值:
for i = 1 to N:
d[i][0] = max (d[i-1][0]+a[i], 0)
for j = 1 to K:
d[i][j] = max(d[i-1][j]+a[i], d[i-1][j-1])
对于0&lt; = max{d[N][j]}
&lt; = K ,和解决方案为j