首页 > 其他分享 >714. 买卖股票的最佳时机含手续费(中)

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

时间:2023-11-21 09:58:07浏览次数:49  
标签:fee 持有 股票 714 最佳时机 手续费 prices dp 利润

目录

题目

  • 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。

    你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。

    返回获得利润的最大值。

    注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。

示例 1:

输入:prices = [1, 3, 2, 8, 4, 9], fee = 2
输出:8
解释:能够达到的最大利润:
在此处买入 prices[0] = 1
在此处卖出 prices[3] = 8
在此处买入 prices[4] = 4
在此处卖出 prices[5] = 9
总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8

示例 2:

输入:prices = [1,3,7,5,10,3], fee = 3
输出:6

动态规划

  • 在买入的时候扣除手续费,最后结果不正确
class Solution:
    def maxProfit(self, prices: List[int], fee: int) -> int:
        n=len(prices)
        dp=[[0] *2 for _ in range(n)]
        #base case
        dp[0][0]=0 # 第一天不持有股票,利润为0
        dp[0][1]=-prices[0]   # 第一天持有股票,利润为-buy
        for i in range(1,n):
            # 不持有股票的情况,取前一天也不持有股票和前一天持有股票但今天卖出的最大利润
            dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i])
            # 持有股票的情况,取前一天也持有股票和前一天不持有股票但今天买入的最大利润,扣除手续费
            dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]-fee)
        return dp[n-1][0]  # 最后一天,不持有股票的利润即为最大利润
  • 错误原因:base case的地方,第一天持有股票的时候没扣除手续费

  • 正确代码:

class Solution:
    def maxProfit(self, prices: List[int], fee: int) -> int:
        n=len(prices)
        dp=[[0] *2 for _ in range(n)]
        #base case
        dp[0][0]=0 # 第一天不持有股票,利润为0
        dp[0][1]=-prices[0] -fee  # 第一天持有股票,利润为-buy
        for i in range(1,n):
            # 不持有股票的情况,取前一天也不持有股票和前一天持有股票但今天卖出的最大利润
            dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i])
            # 持有股票的情况,取前一天也持有股票和前一天不持有股票但今天买入的最大利润,扣除手续费
            dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]-fee)
        return dp[n-1][0]  # 最后一天,不持有股票的利润即为最大利润
  • 在卖出的时候扣除手续费
class Solution:
    def maxProfit(self, prices: List[int], fee: int) -> int:
        n=len(prices)
        dp=[[0] *2 for _ in range(n)]
        #base case
        dp[0][0]=0 # 第一天不持有股票,利润为0
        dp[0][1]=-prices[0]   # 第一天持有股票,利润为-buy
        for i in range(1,n):
            # 不持有股票的情况,取前一天也不持有股票和前一天持有股票但今天卖出的最大利润,扣除手续费
            dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]-fee)
            # 持有股票的情况,取前一天也持有股票和前一天不持有股票但今天买入的最大利润
            dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i])
        return dp[n-1][0]  # 最后一天,不持有股票的利润即为最大利润

优化

待更新...

标签:fee,持有,股票,714,最佳时机,手续费,prices,dp,利润
From: https://www.cnblogs.com/lushuang55/p/17844846.html

相关文章

  • 188. 买卖股票的最佳时机 IV(难)
    目录题目动态规划优化题目给你一个整数数组prices和一个整数k,其中prices[i]是某支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成k笔交易。也就是说,你最多可以买k次,卖k次。注意:你不能同时参与多笔交易(你必须在再次购买前出......
  • 123. 买卖股票的最佳时机 III(难)
    目录题目动态规划题目给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入:prices=[3,3,5,0,0,3,1,4]输出:6......
  • 代码随想训练营第三十二天(Python)| 122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃
    122.买卖股票的最佳时机II1、贪心classSolution:defmaxProfit(self,prices:List[int])->int:res=0foriinrange(1,len(prices)):res+=max(prices[i]-prices[i-1],0)returnres2、动态规划classSolution:d......
  • LeetCode121 买卖股票的最佳时机
    题目描述:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能......
  • 算法题解——买卖股票的最佳时机
    解题思路先考虑最简单的「暴力遍历」,即枚举出所有情况,并从中选择最大利润。设数组prices的长度为n,由于只能先买入后卖出,因此第1天买可在未来n−1天卖出,第2天买可在未来n-2天卖出……以此类推,共有\[(n-1)+(n-2)+\cdots+0=\frac{n(n-1)}{2}\]种情况,时间复......
  • leetcode122买卖股票的最佳时机——贪心、动态规划
    题目描述: 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。 返回 你能获得的 最大 利润 。   示例1......
  • 状态机DP,力扣188. 买卖股票的最佳时机 IV
    状态机DP,力扣188.买卖股票的最佳时机IV整数数组prices和一个整数k,其中prices[i]是某支给定的股票在第i天的价格。一次只能参与一笔交易,最多可以进行k笔交易,求最大利润。确定状态f[n+1][k+2][2],f[i][j][0]、f[i][j][1]分别表示前i天最多进行j次交易,且在第i天时......
  • 力扣-买卖股票的最佳时机(含冷冻期)
    1.问题给定一个整数数组,其中第i个元素代表了第i天的股票价格。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票(即冷冻......
  • 洛谷 UVA10714 Ants の 题解
    这道题只有一个点比较难想。大概思路就是先输入个$t$,表示要跑几轮,后面的照常输入。因为蚂蚁都是一样的,所以两个蚂蚁碰面的时候相互穿过和各自掉头是没有区别的,我们按照前者模拟就好,其余思路暴力求解即可。#include<iostream>#include<cmath>usingnamespacestd;intt;in......
  • 力扣-买卖股票的最佳时机3
    1.问题给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。实例1:输入:[3,3,5,0,0,3,1,4]输出:6解释:在第4天(股票......