如何在线性时间内找到给定k的至少一次包含所有元素1到k的最小子阵列

时间:2016-09-11 11:25:14

标签: arrays algorithm sub-array

假设阵列为{2 4 2 1 5 3 5 3}且k = 3。 子阵列{2 1 5 3}包含1 2 3。

我想知道是否有线性时间算法来解决这个问题。

1 个答案:

答案 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

每当您找到新的间隔时,检查它是否优于已找到的最佳间隔。如果是这样,您将把它作为新的最好处理。如果开始和结束是否定的,则空集是解决方案。否则最好的解决方案是