1. 題目
假設把某股票的價格按照時間先後順序存儲在數組中,請問買賣該股票一次可能獲得的最大利潤是多少?
2. 解題思路
當前的最大利潤 = max(之前的最大利潤, 當前price-之前的最小值)
3. 代碼實現
3.1
class Solution:
def maxProfit(self, prices: List[int]) -> int:
"""
1. 動態規劃,有些類似於最大子數組和這類問題
1)記錄之前的最大利潤;2)記錄之前的最小值位置
"""
lirun = 0 # 記錄最大利潤
min_index = 0 # 記錄之前的最小值下標
for i in range(1, len(prices)):
temp = prices[i] - prices[min_index]
if temp < 0: min_index = i # 更新最小值下標
if temp > lirun:
lirun = temp # 更新最大利潤
return lirun
3.2 優化
class Solution:
def maxProfit(self, prices: List[int]) -> int:
cost, profit = float("+inf"), 0
for price in prices:
cost = min(cost, price)
profit = max(profit, price - cost)
return profit
作者:jyd
鏈接:https://leetcode-cn.com/problems/gu-piao-de-zui-da-li-run-lcof/solution/mian-shi-ti-63-gu-piao-de-zui-da-li-run-dong-tai-2/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
4. 總結
無
5. 參考文獻
[1] 劍指offer叢書
[2] 劍指Offer——名企面試官精講典型編程題