买卖股票的最佳时机含手续费--贪心算法

2023-11-12

LeetCode

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

给定一个整数数组 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.

解法:动态规划

解题思路:

买卖股票就只有三种选择,卖或者买或者不买也不卖

因此我们可以用动态规划的思想

用cash表示不持有股票的最大利润

用hold表示持有股票的最大利润

因此我们可以得到下面两个状态转移方程

cash = Math.max(cash, hold+prices[i]-fee) 
//第一个参数表示不卖, 第二个参数表示卖出手中的股票
hold = max(hold, cash-prices[i])
//第一个参数表示不买股票,第二个参数表示买入一张股票

完整代码:

class Solution {
    public int maxProfit(int[] prices, int fee) {
        int cash = 0, hold = -prices[0];
        for (int i = 1; i < prices.length; i++) {
            cash = Math.max(cash, hold + prices[i] - fee);
            hold = Math.max(hold, cash - prices[i]);
        }
        return cash;
    }
}

值得注意的一段代码:

cash = Math.max(cash, hold + prices[i] - fee);
hold = Math.max(hold, cash - prices[i]);
//按理说,hold应该使用的是前一天的cash,但是在这里却没有保存前一天的cash,主要是因为,
在前面的一行代码中,如果cash=cash,那cash依然是前一天的cash,没有影响,
但是当cash=hold+prices[i]-fee的时候,意味着我们在这一天卖出了股票,
如果在下一行我们选择了买入股票,那hold = hold+prices[i]-fee-prices[i] = hold-fee
既然在这一天我们既卖出又买入,那我们是不是多花了一笔手续费,所以是hold-fee,
这说明了,我们前面就不应该卖出,因为卖出完我们又买入了

题目和解法来源

作者:LeetCode
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/solution/mai-mai-gu-piao-de-zui-jia-shi-ji-han-shou-xu-fei-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

买卖股票的最佳时机含手续费--贪心算法 的相关文章

随机推荐

  • 数学笔记/scipy 笔记:豪斯多夫距离(Hausdorff )

    1 概念 一个点集中的点到另一个点集的最短距离的最大值 1 1 容易受噪声的影响 1 2 性质 当A和B都是闭集的时候 Hausdorff距离满足 2 举例 3 python 实现 3 1 掉包 scipy 3 1 1 数据 from sc
  • 管窥广电总局的TVOS,又一个Android定制版?

    原文地址 http news cecb2b com info 20140711 2515776 shtml 2014年149号通知 国家新闻出版广电总局关于大力开展智能电视操作系统TVOS1 0规模应用试验 加快推动广播电视终端标准化智能化
  • 解决flex布局弹性布局使用justify-content:space-between后最后一行多个元素排版问题

    解决flex布局弹性布局使用justify content space between后最后一行多个元素排版问题 1 当一行有三个元素的时候直接加个伪类 原图 想要实现的效果 html代码 div class floor centerLis
  • SQL 查询优化之 WHERE 和 LIMIT 使用索引的奥秘

    奇怪的慢sql 我们先来看2条sql 第一条 select from acct trans log WHERE acct id 1000000000009000757 order by create time desc limit 0 10
  • 为什么Java源文件中的public类 必须与文件名相同

    每个编译单元 文件 只能有一个public类 这么做的意思是 每个编译单元只能有一个公开的接口 而这个接口就由其public类来表示 而非public修饰的类都是为了给public修饰的类所做支撑的 从软件架构设计和安全性设计上得出的结论
  • 最新Mysql8.0.27安装配置基本使用

    目录 下载MySQL 配置目录文件 初始化Mysql 安装Mysql 配置环境 基本使用 下载MySQL 官方下载地址 https dev mysql com downloads 下载后解压 路径自定义 并新建文件夹data 配置目录文件
  • Vulkan教程翻译之十 创建 Descriptor Set

    原文链接 https vulkan lunarg com doc sdk 1 2 131 2 windows tutorial html 09 init descriptor set html 创建 Descriptor Set 这一章节的
  • haproxy搭建web集群

    目录 HAProxy HAProxy的主要特性 HAProxy负载均衡调度策略 HAProxy的配置文件解读 HAProxy部署 1 安装环境 2 下载haproxy安装包 并安装 3 新建haproxy用户 并在 etc 下创建hapro
  • linux 目录创建与删除 centos7

    root wyflinux tmp cd tmp 进入 tmp 目录 选择在tmp联系目录创建 root wyflinux tmp mkdir p test1 test2 test3 test4 mkdir p 直接创建多级目录 递回 ro
  • 【数据库系统概论】第四、五章:数据库安全性、完整性

    视频 参考资料 内容来自参考链接和视频 文章目录 第四章 数据库安全性 安全性概述 安全性控制 试图机制 审计 数据加密 第五章 数据库完整性 正确性 相容性 三大完整性 第四章 数据库安全性 安全性概述 不安全因素 非授权用户对数据库的恶
  • 用Unity3D实现太阳系仿真

    用Unity3D模拟太阳系仿真 模拟要求 写一个程序 实现一个完整的太阳系 其他星球围绕太阳的转速必须不一样 且不在一个法平面上 操作步骤 1 创建如下结构 sun 里包括8大行星 并且设置好距离和大小 建立结构 建议用2D显示来直观设置距
  • 收藏

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 本文转自 视觉算法 图片来源于网络 语义分割在自然数据集的分割效果不断进步 有研究逐步应用到了遥感领域 尤其是高分辨率遥感影像 由于遥感图像具有海量数据 尺度依赖 空间相
  • 《Kubernetes部署篇:Ubuntu20.04基于containerd部署kubernetes1.24.17集群(多主多从)》

    一 架构图 如下图所示 二 环境信息 1 部署规划 主机名 K8S版本 系统版本 内核版本 IP地址 备注 k8s master 63 1 24 17 Ubuntu 20 04 5 LTS 5 15 0 69 generic 192 168
  • 两个数的简单计算器

    两个数的简单计算器 本题要求编写一个简单计算器程序 可根据输入的运算符 对2个整数进行加 减 乘 除或求余运算 题目保证输入和输出均不超过整型范围 方法一 include
  • 13.网络爬虫—多进程详讲(实战演示)

    网络爬虫 多进程详讲 一 进程的概念 二 创建多进程 三 进程池 四 线程池 五 多进程和多线程的区别 六 实战演示 北京新发地线程池实战 前言 个人简介 以山河作礼 Python领域新星创作者 CSDN实力新星认证 第一篇文章 1 认识网
  • iso文件添加服务器,服务器挂载本地iso文件

    RHEL6 3配置文件共享 2 autofs服务 在上篇博文中我们介绍了利用NFS服务设置文件共享 在客户端必须要先将服务器端的NFS共享目录挂载到本地 然后才能使用 其实在Linux系统中还为我们提供了另外一种更为简单的使用NFS共享的方
  • Java对象深拷贝的几种方式

    对象拷贝 项目开发过程中很多时候需要进行对象复制 可是有的时候会发生复制后的对象 在原对象改变后也相应发生改变 这种时候就有问题了 所以很有必要了解对象的深拷贝 以及深拷贝的几种方式 new 对象 手动 new 新的对象 一个属性一个属性的
  • 掌财社:Flask怎么实现注册登录项目?

    注册和登录功能是绝大多数web应用都需要实现的功能 是相当基础的功能模块 注册登录功能实现需要注意的地方也有很多 今天小编带来了一篇flask实现注册登录功能的项目的简单实现的文章 希望能给正在学习flask的小伙伴一点帮助 本文主要介绍了
  • 调试共享几何图形池

    没有这一节的资料 但是代码该调试到这里了 随意调试着玩吧 环境变量本机都没有设置 看这个意思 似乎是只需要一个几何体 所有的瓦片用类似于matrixTransform gt addChild node 的方式 看看创建 上一层 为什么是第0
  • 买卖股票的最佳时机含手续费--贪心算法

    LeetCode 买卖股票的最佳时机含手续费 给定一个整数数组 prices 其中第 i 个元素代表了第 i 天的股票价格 非负整数 fee 代表了交易股票的手续费用 你可以无限次地完成交易 但是你每笔交易都需要付手续费 如果你已经购买了一