代碼隨想錄算法訓(xùn)練營(yíng)第四十九天|121. 買賣股票的最佳時(shí)機(jī)、122.買賣股票的最佳時(shí)機(jī)II

121.?買賣股票的最佳時(shí)機(jī)?

動(dòng)規(guī)五部曲

確定dp數(shù)組(dp table)以及下標(biāo)的含義

dp[i][0] 表示第i天持有股票所得最多現(xiàn)金

dp[i][1] 表示第i天不持有股票所得最多現(xiàn)金

確定遞推公式

如果第i天持有股票即dp[i][0], 那么可以由兩個(gè)狀態(tài)推出來

第i-1天就持有股票,那么就保持現(xiàn)狀,所得現(xiàn)金就是昨天持有股票的所得現(xiàn)金 即:dp[i - 1][0]

第i天買入股票,所得現(xiàn)金就是買入今天的股票后所得現(xiàn)金即:-prices[i]

dp[i][0] = max(dp[i - 1][0], -prices[i]);

dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);

dp數(shù)組初始化

dp[0][0] -= prices[0]

dp[0][1] = 0

遍歷順序

從前向后遍歷




122.買賣股票的最佳時(shí)機(jī)II?

dp[i][0] 表示第i天持有股票所得現(xiàn)金。

dp[i][1] 表示第i天不持有股票所得最多現(xiàn)金

第i天持有股票即dp[i][0],如果是第i天買入股票,所得現(xiàn)金就是昨天不持有股票的所得現(xiàn)金 減去 今天的股票價(jià)格 即:dp[i - 1][1] - prices[i]。

再來看看如果第i天不持有股票即dp[i][1]的情況, 依然可以由兩個(gè)狀態(tài)推出來

第i-1天就不持有股票,那么就保持現(xiàn)狀,所得現(xiàn)金就是昨天不持有股票的所得現(xiàn)金 即:dp[i - 1][1]

第i天賣出股票,所得現(xiàn)金就是按照今天股票價(jià)格賣出后所得現(xiàn)金即:prices[i] + dp[i - 1][0]

intmaxProfit(vector<int>&prices){intlen=prices.size();vector<vector<int>>dp(len,vector<int>(2,0));dp[0][0]-=prices[0];dp[0][1]=0;for(inti=1;i<len;i++){dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]);// 注意這里是和121. 買賣股票的最佳時(shí)機(jī)唯一不同的地方。dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i]);}returndp[len-1][1];}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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