经典的最大化股票利润问题涉及一个股票价格的数组,并且你需要返回最大利润:
我理解为给定股票报价最大化利润的逻辑。简单地说,我们可以保持一个运行min和一个运行max_so_far,我们检查当前elem是否小于min或当前elem-运行min是否大于max_so_far,如果是,我们更新max_so_far
我们最终返回我们的最大利润,这是可以做到的最大利润。
现在,我们如何解决二次射击策略的问题基本上,你需要返回i0,j0,i1,j1,使得ARR [j0] -ARR[i0]和ARR[j1] -ARR[i1]的总和最大,并且i0我能在一定程度上思考,但后来想不出如何概括它所以,首先我可以得到一个包含所有max_so_far元素的单发解决方案数组。类似地,我可以做一个类似的数组,但是从arr[n-1]开始到0。这告诉我,如果今天之后我必须卖掉,我能赚的最大利润是多少如果我在向前迭代时在数组中添加相应的元素,在向后迭代时在数组中添加相应的元素,并从中获取max元素,则这对应于max i0、j0、i1、j1
但是有人能先解释一下k-shot算法的逻辑吗?我想接下来我会想了解一下k-shot策略,如何将2-shot策略扩展到k-shot。
谢谢
最佳答案
一个泛化是保持一个2K+ 1元素数组,其中J个条目(从零计数)是J交易交替买入和卖出后的最大现金。如果j是偶数,那么下一笔交易就是购买。如果j是奇数,那么下一笔交易就是卖出。
最初,数组是0,-inf,-inf,…,-inf(负无穷表示条目不可行)。当下一个价格p出现时,按如下顺序更新索引2k、2k-1、…、1处的元素2K的最佳交易是(i)上一条分录的最大值,表示2K以前的交易(ii)2K-1加P的分录,表示2K-1以前的交易,然后以P卖出。2K-1的最佳交易是(i)上一条分录的最大值,表示2K-1以前的交易(ii)2K-2减去P的分录,表示2K-2之前的交易,然后按P买入。继续交替加减。
我将把恢复买入/卖出时机的问题留作练习。
关于algorithm - 股票的2shot策略和kshot策略算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18198527/