同一天不会同时买卖,没啥意义
1 最多买卖一次
class Solution:
def maxProfit(self, prices: List[int]) -> int:
# 最多买卖股票一次
# 第二维0代表:没有买 1代表:买了还没卖 2代表:买了又卖
if not prices: return 0
res = 0
profit = [[0 for _ in range(3)] for _ in range(len(prices))]
profit[0][0], profit[0][1], profit[0][2] = 0, -prices[0], 0
for i in range(1, len(prices)):
# profit[i][0] = profit[i-1][0]
profit[i][1] = max(profit[i-1][1], profit[i-1][0] - prices[i])
profit[i][2] = profit[i-1][1] + prices[i]
# res = max(res, profit[i][0], profit[i][1], profit[i][2])
res = max(res, profit[i][2])
return res
2 最多买卖两次,不能同时持有两支股票
class Solution:
def maxProfit(self, prices: List[int]) -> int:
# 最多买卖两次,不能同时持有两支股票
# 第一是第几天,第二维是之前交易了几次,第三维是是否持有股票
# 交易是买卖一次记为一次
maxint = float('inf')
if not prices: return 0
profit = [[[0 for _ in range(2)] for _ in range(3)] for _ in range(len(prices))]
profit[0][0][0], profit[0][0][1] = 0, -prices[0]
profit[0][1][0], profit[0][1][1] = -maxint, -maxint
profit[0][2][0], profit[0][2][1] = -maxint, -maxint
for i in range(1, len(prices)):
# profit[i][0][0] = profit[i-1][0][0]
profit[i][0][1] = max(profit[i-1][0][1], profit[i-1][0][0] - prices[i])
profit[i][1][0] = max(profit[i-1][1][0], profit[i-1][0][1] + prices[i])
profit[i][1][1] = max(profit[i-1][1][1], profit[i-1][1][0] - prices[i])
profit[i][2][0] = max(profit[i-1][2][0], profit[i-1][1][1] + prices[i])
return max(profit[-1][0][0], profit[-1][1][0], profit[-1][2][0])
3
买卖无数次,只持有一股
class Solution:
def maxProfit(self, prices: List[int]) -> int:
maxprofit = 0
for i in range(1, len(prices)):
if prices[i] > prices[i - 1]:
maxprofit += prices[i] - prices[i - 1]
return maxprofit