0

假设数组是 {2 4 2 1 5 3 5 3} 并且 k=3。子数组 {2 1 5 3} 包含 1 2 3。

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

4

1 回答 1

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

每当你找到一个新的区间时,你都会检查它是否比已经找到的最佳区间更好。如果是这样,你把它当作新的最好的。如果 begin 和 end 为负数,则空集是解决方案。否则最好的解决方案是

于 2016-09-11T13:20:56.073 回答