leetcode_122 買賣股票的最佳時機②

動態(tài)規(guī)劃,我們用兩個變量還記錄每天i的受益,一個記錄當天結(jié)束后沒有股票dp[i][0],一個記錄當天結(jié)束后持有股票dp[i][1],每天的受益假設只跟前一天相關,如果當天結(jié)束后沒有股票,有兩種情況,一是前一天持有股票,今天賣掉了,那么受益是前一天加上今天的股票價格:dp[i-1][1]+prices[i],二十前一天 沒有股票,那么受益跟前一天一樣:dp[ip-1][0];如果當天結(jié)束后持有股票,也是兩種情況,一種是前一天沒有股票,今天買入,那么今天的受益是昨天的減去今天的股票價格:dp[i-1][0]-prices[i],第二種情況是前一天就持有股票,那么今天的受益跟前一天一樣:dp[i-1][1]。通過這個動態(tài)方程計算每一天的值,我們初始化為dp[0][0]=0,dp[0][1]=-prices[1],結(jié)束時返回dp[n-1][0],因為今天的受益肯定是將股票全部拋出最大。

var maxProfit = function(prices) {
    const n = prices.length;
    const dp = new Array(n).fill(0).map(v => new Array(2).fill(0));
    dp[0][0] = 0, dp[0][1] = -prices[0];
    for (let i = 1; i < n; ++i) {
        dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] + prices[i]);
        dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] - prices[i]);
    }
    return dp[n - 1][0];
};
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容