股票销售的最大利润使得买卖之间存在最多“L”天的差异

时间:2016-09-06 21:36:11

标签: c algorithm

我正在尝试使用最大差异算法解决股票销售问题,但我无法解决条件i<j<=i+l,其中i是购买日的索引{ {1}}是销售指数,j是必须销售的最大库存天数。我需要O(n)算法。

l

1 个答案:

答案 0 :(得分:1)

因此,对于每个i,我们需要[i - len, i-1]中的最小值。我们可以使用deque来执行此操作,我们将从前到后按升序排序。第一个元素总是最小的。我们将索引存储在双端队列中,而不是实际值。

st.push_back(0)
max_profit = 0
for i = 1 to size - 1:
    while !st.empty() && i - st.front() > len: // remove elements farther than len from i 
        st.pop_front()
    if array[i] - array[ st.front() ] > max_profit:
        max_profit = array[i] - array[ st.front() ]

    // add array[i] to the deque, while keeping it sorted.
    while !st.empty() && array[ st.back() ] > array[i]:
        st.pop_back()
    st.push_back(i)

由于每个元素最多可以进入和离开一次双端队列,因此这是O(n)