本题题意主要是,在一只股票的N天价格中,通过不限次数的交易,求得最大利润。
相当于T121的简单进阶版
我最开始的思路是:
初始买入日为第一天,利润和设置为0
- 如果今天比买入那天股价高,则考虑明天的股价
1.1 如果明天的股价更高,则不卖
1.2 如果明天的股价不更高,则卖,总利润 += (今天价格-买入那天的价格),然后把买入价格设置为明天 - 如果今天比买入那天低,则把买入日设置为今天
- 如果今天跟买入那天的股价一样,则不处理pass
class Solution:
def maxProfit(self, prices: List[int]) -> int:
max_profit = 0
min_index = 0
for i in range(len(prices)):
if prices[i] < prices[min_index]:
min_index = i
elif prices[i] > prices[min_index]:
if i+1 < len(prices) and prices[i] < prices[i+1]:
continue
else:
max_profit = max_profit + (prices[i] - prices[min_index])
min_index = i + 1
return max_profit
提交以后看了一下题解,有一个更好的方法,其实本题可以抽象为求所有递增子序列的(max-min)的总和,由于不限交易次数,所以只要后一天大于前一天,可以直接用后一天减前一天。
(以下代码来自LeetCode中文网52s的解)
class Solution:
def maxProfit(self, prices):
l=len(prices)
if l<2:
return 0
s=0
for i in range(0,l-1):
m=prices[i+1]-prices[i]
if m>0:
s+=m
return s