先說明一下這是後知後覺的解答,所謂後知就是股票價格已知存在陣列(清單),當然就要用迴圈練習,雙迴圈暴力解需時O(n**2),當然不用,採python單一迴圈解答「最佳股票的買賣時機#LeetCode 121 Best Time to Buy and Sell Stock」,解法簡單快速O(n)時間。這是僅能一次買賣的問題,還有其他類似的問題陸續解出。
[code on Leetcode]https://leetcode.com/problems/best-time-to-buy-and-sell-stock/solutions/3758901/c-python-greedy-explain-w-pyplot/
[這是可當日沖銷的無交易費,100%C++ 解答LeetCode 122 Best Time to Buy and Sell Stock 2]https://youtu.be/sJd7Q0HyyRg
class Solution: def maxProfit(self, prices): """ 計算股票的最大利潤。 參數: prices (List[int]): 一系列整數,代表不同日子的股票價格。 返回值: int: 可達到的最大利潤。 """ # 初始利潤為 0 profit = 0 # 設定購買價格為第一天的價格 buy = prices[0] # 遍歷股價列表 for x in prices[1:]: # 更新購買價格為目前價格和之前購買價格中的最小值 buy = min(buy, x) # 更新利潤為目前利潤和當天賣出後的利潤的最大值 profit = max(profit, x - buy) return profit def main(): # 範例使用: prices = [7, 1, 5, 3, 6, 4] # 不同日子的股票價格範例 solution = Solution() max_profit = solution.maxProfit(prices) print("最大利潤:", max_profit) if __name__ == "__main__": main()
matplotlib.pyplot繪圖部份如下
import matplotlib.pyplot as plt prices = [7,1,5,3,6,4] plt.plot(prices, 'go--') plt.savefig('prices.png') plt.show()
沒有留言:
張貼留言