Skip to content

Latest commit

 

History

History
50 lines (37 loc) · 2.02 KB

309.md

File metadata and controls

50 lines (37 loc) · 2.02 KB

✏️基础刷题之(309. Best Time to Buy and Sell Stock with Cooldown)


. 2019-12-8 星期日 开始吧 库里的深夜食堂

✏️描述

这还是关于之前做过的关于买卖股票的问题,可以看看之前的文章。这道题和之前的一个不同点是,如果你在当天卖出股票了,会有一个冷却期,即第二天不能进行任何操作。在这样的基础上,求出利润的最大值。


✏️题目实例


✏️题目分析

思路还是可以用动态规划来,老生常谈的两步,状态的定义,以及状态的转移方程,如果第一次接触动态规划,可以看看我之前写在社区的文章(https://learnku.com/articles/37063),里面还有很多例题解析,你可以自己动手查看,这里简单的说下,状态的定义这里无非是持有股票以及未持有股票的状态,状态转移值得注意的地方在于,持有股票的状态要么是前一天也是持有,要么就是前两天未持有(刚卖出去一天的冷却期),今天购买持有的状态。

✏️最终实现代码

/**
     * @param Integer[] $prices
     * @return Integer
     */
    function maxProfit($prices) {
        if(count($prices)==0) return 0;
        $noBlock[0]=0;
        $hasBlock[0]=-$prices[0];
        $noBlock[1]=max($noBlock[0],$hasBlock[0]+$prices[1]);
        $hasBlock[1]=max($hasBlock[0],0-$prices[1]);
        for($i=2;$i<count($prices);$i++){   
            $noBlock[$i]=max($noBlock[$i-1],$hasBlock[$i-1]+$prices[$i]);
            $hasBlock[$i]=max($hasBlock[$i-1],$noBlock[$i-2]-$prices[$i]);
        }
        return $noBlock[count($prices)-1];
    }

联系