股票买卖121,122,123

同一天不会同时买卖,没啥意义

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值