假设阵列为{2 4 2 1 5 3 5 3}且k = 3。 子阵列{2 1 5 3}包含1 2 3。
我想知道是否有线性时间算法来解决这个问题。
答案 0 :(得分:0)
是的,有:
begin = -1
end = -1
best = 0
new = 1
finalbegin = -1
finalend = -1
for i = 1 to n
if (new and input[i] >= 1 and input <= k)
begin = i
new = 0
end if
if (new and (input[i] <= 1 or input[i] >= k) or (i = n))
if (input[i] <= 1 or input[i] >= k)
end = i - 1
else
end = i
end if
new = 1
if (end - begin >= best)
finalbegin = begin
finalend = end
best = end - begin + 1
end if
end if
end for
每当您找到新的间隔时,检查它是否优于已找到的最佳间隔。如果是这样,您将把它作为新的最好处理。如果开始和结束是否定的,则空集是解决方案。否则最好的解决方案是