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

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(使用前将#替换为@)

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

  • 4-2 背包问题(贪心)

    4 2 背包问题 贪心 与0 1背包问题类似 所不同的只是在选择物品i装入背包时 可以选择物品的一部分而不一定要全部 1 i n 用贪心算法解背包问题的基本步骤是 首先计算每种物品单位重量的价值vi wi 然后 依贪心选择策略 将尽可能多的
  • 蓝桥杯接龙数列(动态规划)

    蓝桥杯2023年第十四届省赛真题 接龙数列 C语言网 dotcpp com 我们要求最少删除多少个数 可以使剩下的序列是接龙序列 那么找到一条最长的接龙数列即可求出最少删除的个数 运用动态规划的思想 从前往后挨个考虑每个数字 一个前缀为6的
  • 入门级动态规划五步法(斐波那契数)

    1 确定dp数组 dp table 以及下标的含义 2 确定递推公式 3 dp数组如何初始化 4 确定遍历顺序 5 举例推导dp数组 class Solution def fib self n int gt int if n 0 retur
  • 动态规划练习一 14:怪盗基德的滑翔翼

    描述 怪盗基德是一个充满传奇色彩的怪盗 专门以珠宝为目标的超级盗窃犯 而他最为突出的地方 就是他每次都能逃脱中村警部的重重围堵 而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼 有一天 怪盗基德像往常一样偷走了一颗珍贵的钻石 不料却被柯
  • 蓝桥杯基础练习VIP——矩阵乘法——快速幂

    题目https www dotcpp com oj problem1472 html 1 普通做法 循环嵌套 n m list map int input split mat for i in range n row list map in
  • [HDU 5079][2014 Asia AnShan Regional Contest]Square(DP套DP)

    题目链接 http acm hdu edu cn showproblem php pid 5079 题目大意 给你一个 n n n 8 n middot n n le 8 的棋盘 上面有一些格子必须是黑色 其它可以染黑或者染白 对于一个棋盘
  • 洛谷P1028 [NOIP2001 普及组] 数的计算 —— 简单DP+双指针优化

    This way 题意 给出自然数 n n n 要求按如下方式构造数列 只有一个数字 n n n 的数列是一个合法的数列 在一个合法的数列的末尾加入一个自然数 但是这个自然数不能超过该数列最后一项的一半 可以得到一个新的合法
  • 滑雪(记忆化搜索)

    题目 题解 记忆化搜索模板题 记忆化搜索的核心 本质是带剪枝的深搜 当某点的dp已赋值时 返回该值 其他情况进行深度搜索 模板 dfs u点 if u点的 dp 已经有值了 return u点的 dp 值 else 说明第一次到达u 则为u
  • Thief in a Shop 【CodeForces - 632E】【背包】

    题目链接 给了N个物品 每个物品无限个 我们要的是求刚好我们拿了K个物品的时候 能组成哪几种数 我们可以想个办法去填充 那么就需要有一个所谓的0状态 然后假如不足K个的时候 就可以拿这个所谓的0状态来填充了 所以 我们把所有的数排序 然后都
  • 特殊类型动归--区间动归与环形动归

    区间动归 某类有序事件中前若干个事件的子答案 不能再支撑状态转移 我们需要去寻找 从某个元素起到另一个元素结束所包含所有的 连续 元素的子答案 作为状态 可以想象 在这个描述下 每个状态会对应于原题序列上的一个区间 区间具有良好的性质 短的
  • HJ103 Redraiment的走法

    Redraiment是走梅花桩的高手 Redraiment可以选择任意一个起点 从前到后 但只能从低处往高处的桩子走 他希望走的步数最多 你能替Redraiment研究他最多走的步数吗 示例 2 5 1 5 4 5 输出 3 说明 6个点的
  • 要求输入月份,判断该月所处的季节并输出季节(假设:12、1、2 月为冬季,依次类推)

    public class Task 10101003 03 public static void main String args Scanner input new Scanner System in System out println
  • 2023华为OD机试真题【最大平分数组/动态规划】

    题目描述 给定一个数组nums 可以将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 最大的平分组个数 输入描述 第一行输入 m 接着输入m个数 表示此数组 数据范围 1 lt M lt 50 1 lt nums i lt 50
  • 《算法图解》第九章动态规划学习心得

    1 背包问题 动态规划先解决子问题 再逐步解决大问题 每个动态规划都从一个网格开始 背包问题的网格如下 网格最初是空的 动态规划就是逐步将网格填满 吉他行 第一个单元格表示背包的容量为1磅 吉他的重量也是1磅 这意味着它能装入背包 因此这个
  • 华为机试题103-Redraiment的走法

    描述 Redraiment是走梅花桩的高手 Redraiment可以选择任意一个起点 从前到后 但只能从低处往高处的桩子走 他希望走的步数最多 你能替Redraiment研究他最多走的步数吗 数据范围 每组数据长度满足1 n 200 数据大
  • 华为od机考真题-数据分类

    while 1 try c b nums list map int input split dp
  • 37: 合并区间

    题目 以数组 intervals 表示若干个区间的集合 其中单个区间为 intervals i starti endi 请你合并所有重叠的区间 并返回 一个不重叠的区间数组 该数组需恰好覆盖输入中的所有区间 思路 这道题我的思路完全正确 先
  • 最大k乘积问题--动态规划

    问题 问题描述 设x是一个n位十进制整数 如果将x划分为k段 则可得到k个整数 这k个整数的乘积称为x的一个k乘积 试设计一个算法 对于给定的x和k 求出x的最大k乘积 编程任务 对于给定的x和k 编程计算x的最大k 乘积 示例 Sampl
  • C/C++---------------LeetCode第509. 斐波那契数

    斐波那契数列 题目及要求 暴力递归 备忘录的递归 动态规划 题目及要求 斐波那契数 通常用 F n 表示 形成的序列称为 斐波那契数列 该数列由 0 和 1 开始 后面的每一项数字都是前面两项数字的和 也就是 F 0 0 F 1 1 F n
  • 【算法刷题】每日打卡——动态规划(1)

    背包问题 例题一 有 N件物品和一个容量是 V 的背包 每件物品只能使用一次 第 i件物品的体积是 vi 价值是 wi 求解将哪些物品装入背包 可使这些物品的总体积不超过背包容量 且总价值最大 输出最大价值 输入格式 第一行两个整数 N V

随机推荐

  • 数学笔记/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 代表了交易股票的手续费用 你可以无限次地完成交易 但是你每笔交易都需要付手续费 如果你已经购买了一