Best Time to Buy and Sell Stock系列
一、陣列i位置代表第i天股票的價格,只允許,買一次,賣一次,買賣不可以在同一天,求最大利潤。
思路:第0天買,找比第0天價格高的最多的一天賣出,得到第0天買入的最大利潤;以此類推,得到n-1個最大利潤,求其中的最大值,即滿足題目要求。
這個演算法的複雜度分析:
n-1+n-2+n-3+.....+1=n(n-1)/2 時間複雜度是O(N^2)
空間複雜度為O(1)
必然可以簡化演算法。
記錄當前最小值,用當前值減去最小值,得到的利潤與當前最大利潤比較。
就是如果後者比前者大,那後者肯定不是買入的那一天,也就不用去算那天買入時的最大利潤。
複雜度分析:
時間複雜度O(N) 因為只遍歷了一次
空間複雜度還是常數
有兩種寫法:
直觀法:
巧妙法:Kadane's Algorithm 算是一種簡單的動態規劃
https://en.wikipedia.org/wiki/Maximum_subarray_problem
遇到比當前最大利潤買入股價要小的,就從這天買入計算最大利潤,最後進行比較。
二、可以買賣多次,求最大利潤。
思路:只要後者大於前者,就可以進行一次買賣。同一天可以同時買賣。
複雜度分析:
時間複雜度,O(N)
空間複雜度,O(1)
三、只能進行兩次買賣 還是動態規劃 k次交易 令k=2
https://blog.csdn.net/linhuanmars/article/details/23236995
時間複雜度:2N ,O(N)
空間複雜度:O(1)
為什麼要倒序?因為要用到上一天的max_cur[j-1],所以j不能先更新小的
四、只能k次 但是用以上方法,記憶體出錯
空間複雜度 O(N)
五、Best Time to Buy and Sell Stock with Cooldown
可以進行多次交易,但是這一天賣出去,需要冷靜一天,再進行買賣。
其實與二相似,buy 是一天 然後後邊選擇連續兩天,sell+cooldown.
那麼需要維護兩個陣列,
sell【i】第i天手裡沒股票的zui大利潤,今天賣了股票或者,沒動作。
buy[i] 第i天手裡有股票,今天買了股票,或者之前買的,今天不賣。
那sell[i]=max(prices[i]+buy[i-1],sell[i-1])
buy[i]=max(buy[i-1],sell[i-2]-prices[i])
最終手裡沒股票。sell[n-1]
時間複雜度:O(N)
空間複雜度:O(N)
可以優化空間複雜度,因為sell,只與前一個有關,buy只與前兩個有關。
六、每次賣要給交易費
在二的基礎上增的限制,是多次交易減去交易費,但是用二的做法,並不能知道交易多少次。
相關文章
- Best Time to Buy and Sell Stock系列分析
- 121|Best Time to Buy and Sell Stock
- [leetcode]Best Time to Buy and Sell StockLeetCode
- 121. Best Time to Buy and Sell Stock
- 貪心法-Best Time to Buy and Sell Stock
- [LeetCode] 121. Best Time to Buy and Sell StockLeetCode
- leetcode_best-time-to-buy-and-sell-stock-iiLeetCode
- [LeetCode] 122. Best Time to Buy and Sell Stock IILeetCode
- leetcode best-time-to-buy-and-sell-stock-iii(Java)LeetCodeJava
- 【Lintcode】393. Best Time to Buy and Sell Stock IV
- LeetCode 309. Best Time to Buy and Sell Stock with CooldownLeetCode
- 【leetcode】40-best-time-to-buy-and-sell-stock 力扣 121. 買賣股票的最佳時機LeetCode力扣
- 42-best-time-to-buy-and-sell-stock-iii 力扣 123. 買賣股票的最佳時機 III力扣
- 【LeetCode】309. Best Time to Buy and Sell Stock with Cooldown 最佳買賣股票時機含冷凍期(Medium)(JAVA)LeetCodeJava
- 44-best-time-to-buy-and-sell-stock-with-cooldown 力扣 309. 買賣股票的最佳時機包含冷凍期力扣
- Time Series Analysis (Best MSE Predictor & Best Linear Predictor)
- [LeetCode] 2073. Time Needed to Buy TicketsLeetCode
- 【PAT_1062】To Buy or Not to Buy
- use_sim_time-ROS系列ROS
- TTEC遭勒索軟體攻擊後影響客戶業務 包括Verizon、Best Buy、美國銀行等
- SAP Stock Inconsistency
- The best LeetCode NodesLeetCode
- Best Team With No Conflicts
- SELL 指令碼程式設計指令碼程式設計
- Best Wishes「兔」You!
- 題解:P10688 Buy Tickets
- 攻防世界-best_rsa
- 25 Best Java Books In 2022Java
- time time_t tm用法
- How to Buy a Fake Cal Poly Pomona Diploma Quickly?UI
- 矩陣樹定理 BEST 定理矩陣
- [ARC060F] Best Representation
- The Best Way to Export an SVG from SketchExportSVG
- DREAM TIME
- 矩陣樹定理與BEST定理矩陣
- Oracle 12.2 RAC on Linux Best Practice DocumentationOracleLinux
- 【貪心】POJ 3617:Best Cow Line
- 20 compliments that needs to be said to my girl from time to timeAI