zoukankan      html  css  js  c++  java
  • 每日一题20201217(714. 买卖股票的最佳时机含手续费)

    714. 买卖股票的最佳时机含手续费

    image-20201217140659403

    思路

    说明: 本篇题解不是自己想出来的,出自: 
    
    https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/solution/jian-dan-dpmiao-dong-gu-piao-mai-mai-by-tejdo/
    

    用动态规划来做,建立一个数组dp,数组长度为2,第一个元素代表第i天不持有股票,第二个元素代表第i天持有股票

    第i天持有股票可以分2种情况,第i-1天不持有股票和第i-1天持有股票:

    也就是第i天继续不买股票和第i天卖出股票
    dp[0] = max(dp[0], dp[1]+prices[i]-fee)

    第i天持有股票也可以分2种情况: 第i-1天不持有股票和第i-1天持有股票

    dp[1] = max(dp[0]-prices[i], dp[1])

    最后只要股票出掉,那么就是最大收益即dp[0]

    class Solution:
        def maxProfit(self, prices: List[int], fee: int) -> int:
            if len(prices) == 0:
                return 0
            # 第1天不买收益0元 买 收益-prices[0]
            dp = [0, -prices[0]]
            # 从第二天开始
            for p in range(1, len(prices)):
                # 将dp[0]存储起来,因为dp[0]即将变化
                tmp = dp[0]  # 不买
                # 此时计算新的dp[0] 如果前一天不持有今天继续不持有,则收益与前一天一致
                # 如果前一天持有今天不持有,就是昨天的收益dp[1]+prices[p]-fee
                dp[0] = max(dp[0], dp[1]+prices[p]-fee)
                # 今天继续持有,保持不变,昨天没持有今天持有等于买入操作
                # 用之前的dp[0]-prices[p] 取最大者
                dp[1] = max(dp[1], tmp-prices[p])
            # 最后手里不持有股票是最佳收益
            return dp[0]
    
    

    image-20201217141904052

  • 相关阅读:
    php7垃圾回收机制
    PHP-FPM
    go main.main之前的准备
    ElementUI MessageBox 弹框
    ElementUI table 样式修改
    ElementUI Dropdown 下拉菜单
    vue+django实现下载文件
    ElementUI 点击展开/隐藏
    vue+django实现websocket连接
    ElementUI 上传文件以及限制
  • 原文地址:https://www.cnblogs.com/we8fans/p/14149391.html
Copyright © 2011-2022 走看看