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