leetcode 123. 买卖股票的最佳时机 III
生活随笔
收集整理的這篇文章主要介紹了
leetcode 123. 买卖股票的最佳时机 III
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用動態規劃的解法,空間復雜度O(2*2)如果交易k次則為O(2*k),時間復雜度O(2n),交易k次為O(n*k),
因此本題實際上可以退化為買賣一次的情況:去掉buy2和sell2,即leetcode121;? ?以及進化為買賣k次的情況,即狀態變量增加為k個buy和sell,即leetcode188
初始化buy[k]=-∞,sell[k]=0;具體原理如下:
?
class Solution { public:int maxProfit(vector<int>& prices) {//當只能持有1股時題目可以認為是一個二維的圖計算遞推,定義buy1,sell1,buy2,sell2,表示第i天(i為下標)第1或2次買入賣出//定義狀態轉移,見程序//為了能夠遞推需要狀態初值,考慮第0天buy1肯定為買入第0天,需要讓-price在任何情況下都大于buy1,因此buy1初值為-∞//sell1的狀態至少是當天買入并賣出,因此最小為0,又因為只要大于0就應該選擇大于0的方案,綜合兩種情況應該賦值為0,同理buy2和sell2int len=prices.size();if(len<=1) return 0;int sell1=0,sell2=0,buy1=INT_MIN,buy2=INT_MIN;int res=0;for(int price:prices){buy1=max(buy1,-price);sell1=max(sell1,buy1+price);buy2=max(buy2,sell1-price);sell2=max(sell2,buy2+price);}return sell2;} };?
轉載于:https://www.cnblogs.com/joelwang/p/10865258.html
總結
以上是生活随笔為你收集整理的leetcode 123. 买卖股票的最佳时机 III的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为S1720, S2700, S570
- 下一篇: 初识 TensorFlow 旅程之一