题目大意是给你一些股价,选择买入和卖出,使赚得最多,只能买入后卖出,并且只能买卖两次。
双指针和动态规划的思想。
一个指针从前往后指,记录下从开头到当前的赚最多的一次买卖
一个指针从后往前,记录下从当前到数组末尾赚的最多的一次买卖
同时加上当前从前往后的买卖,与ans进行比较。
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if len(prices)==0:
return 0
pre_min=prices[0]
pre_max=prices[-1]
left=[0]*len(prices)
right=0
ans=0
for i in range(1,len(prices)):
pre_min=min(prices[i],pre_min)
left[i]=max(prices[i]-pre_min,left[i])
for i in range(len(prices)-2,-1,-1):
pre_max=max(prices[i],pre_max)
right=max(pre_max-prices[i],right)
ans=max(left[i]+right,ans)
return ans