日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

买卖股票的最佳时机II

發布時間:2024/4/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 买卖股票的最佳时机II 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

思路

本題和121. 買賣股票的最佳時機的唯一區別本題股票可以買賣多次了(注意只有一只股票,所以再次購買前要出售掉之前的股票)

這里重申一下dp數組的含義:

dp[i][0] 表示第i天持有股票所得現金。
dp[i][1] 表示第i天不持有股票所得最多現金

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

第i-1天就持有股票,那么就保持現狀,所得現金就是昨天持有股票的所得現金 即:dp[i - 1][0]
第i天買入股票,所得現金就是昨天不持有股票的所得現金減去 今天的股票價格 即:dp[i - 1][1] - prices[i]

注意這里和121. 買賣股票的最佳時機唯一不同的地方,就是推導dp[i][0]的時候,第i天買入股票的情況。

在121. 買賣股票的最佳時機中,因為股票全程只能買賣一次,所以如果買入股票,那么第i天持有股票即dp[i][0]一定就是 -prices[i]。

而本題,因為一只股票可以買賣多次,所以當第i天買入股票的時候,所持有的現金可能有之前買賣過的利潤。

那么第i天持有股票即dp[i][0],如果是第i天買入股票,所得現金就是昨天不持有股票的所得現金 減去 今天的股票價格 即:dp[i - 1][1] - prices[i]

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

第i-1天就不持有股票,那么就保持現狀,所得現金就是昨天不持有股票的所得現金 即:dp[i - 1][1]
第i天賣出股票,所得現金就是按照今天股票佳價格賣出后所得現金即:prices[i] + dp[i - 1][0]

class Solution { public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(),vector<int>(2));dp[0][0]=-prices[0];dp[0][1]=0;for(int ii=1;ii<prices.size();ii++){dp[ii][0]=max(dp[ii-1][0],dp[ii-1][1]-prices[ii]);//dp[ii][1]=max(dp[ii-1][1],dp[ii-1][0]+prices[ii]);}return max(dp[prices.size()-1][0],dp[prices.size()-1][1]);} }; 時間復雜度:O(n) 空間復雜度:O(n)

總結

以上是生活随笔為你收集整理的买卖股票的最佳时机II的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。