121:
1、暴力(超时)
class Solution:
def maxProfit(self, prices: List[int]) -> int:
# 1、暴力 O(n2)
days = len(prices)
maxpro = 0
for i in range(days):
for j in range(i+1,days):
maxpro = max(prices[j]-prices[i],maxpro)
return maxpro
2、记录最低价
class Solution:
def maxProfit(self, prices: List[int]) -> int:
# 2、记录第i日之前的最低价,在计算与当前的差值
days = len(prices)
maxpro = 0
minpri = prices[0]
for i in range(days):
maxpro = max(maxpro,prices[i]-minpri)
if prices[i] < minpri:
minpri = prices[i]
return maxpro
122:
根据上一题可以得到,我们只需要在价格较低时买入,价格高时卖出即可
class Solution:
def maxProfit(self, prices: List[int]) -> int:
minpri = prices[0]
maxpro = 0
flag = 0 # 记录此时状态
days = len(prices)
for i in range(days-1):
# 买入
if prices[i+1]>prices[i] and flag == 0:
minpri = prices[i]
i = i+1
flag = 1
continue
# 卖出
elif prices[i+1]<prices[i] and flag == 1:
maxpro += prices[i]-minpri
flag = 0
if flag == 1:
maxpro += prices[days-1] - minpri
return maxpro