当前位置: 首页 > news >正文

算法题:买卖股票的最佳时机含手续费(动态规划解法贪心解法-详解)

这道题有两种解法:动态规划  or  贪心算法。

贪心算法的提交结果要比动态规划好一些,总体上动态规划的解法更容易想到。(完整题目附在了最后)

1、动态规划解法

设置两个数,dp[0]表示遍历到股票prices[i]时手里没有股票情况下的纯利润(要么就是无操作,要么就是卖掉手里的股票,卖掉股票是要减去fee,两种操作之间选择利益最大的做法); dp[1]表示遍历到股票prices[i]时手里有股票情况下的纯利润(在“无操作”和“购入当前股票”两种做法之间选择利益最大的做法),那么遍历到股票prices[i+1]时,

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

根据整体意思,dp初始化时为 [0, -prices[0]]。

# 动态规划解法
class Solution(object):def maxProfit(self, prices, fee):n = len(prices)dp = [0, -prices[0]]for i in range(1, n):dp = [max(dp[0], dp[1] + prices[i] - fee), max(dp[1], dp[0] - prices[i])]return max(dp)

2、贪心解法

1)在连续递减的情况下买入价格最低时的股票,在不亏本的情况下如果连续递增则在最高点卖掉股票(因为要多考虑一个fee的费用,所以不亏本的前提要加上)。

2)代码有点弯弯绕在里面,就是在还没买入的时候我们把手续费fee加到当前股票价格price上面,遍历prices数组,判断各个相邻price+fee后的大小,在连续递减的情况下选择最低点的买入。

3)买入之后就要寻找最高点卖出,我们继续往后遍历,找到卖出能够有利润的第一支股票,设置一个“虚拟卖出”,由于后面的股票价格可能更高,所以这里不一定是当前这笔交易最后卖出的价格。如果后面的股票价格更高,则把价格差加入到profit里面,直到股票价格开始下降,当前交易才算完成,购入点为最低点,卖出点为有利润的情况下的最高点。

4)重复2)与3)中的买入卖出步骤,直到遍历完prices数组。

# 贪心解法
class Solution:def maxProfit(self, prices, fee):n = len(prices)profit = 0budget = prices[0] + feefor i in range(1, n):if prices[i] + fee < budget:budget = prices[i] + feeelif prices[i] > budget:profit += prices[i] - budgetbudget = prices[i]return profit

3、完整题目:

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

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

提示:

  • 1 <= prices.length <= 5 * 10^4
  • 1 <= prices[i] < 5 * 10^4
  • 0 <= fee < 5 * 10^4

相关文章:

算法题:买卖股票的最佳时机含手续费(动态规划解法贪心解法-详解)

这道题有两种解法&#xff1a;动态规划 or 贪心算法。 贪心算法的提交结果要比动态规划好一些&#xff0c;总体上动态规划的解法更容易想到。&#xff08;完整题目附在了最后&#xff09; 1、动态规划解法 设置两个数&#xff0c;dp[0]表示遍历到股票prices[i]时手里没有股…...

【gcc】RtpTransportControllerSend学习笔记 4:码率分配

本文是woder大神 的文章的学习笔记。 大神的webrtc源码分析(8)-拥塞控制(上)-码率预估 详尽而具体,堪称神作。 gcc保障带宽公平性,预估码率后要分配码率,实现qos效果: webrtc源码分析(9)-拥塞控制(下)-码率分配 是 woder 大神进一步给出的另一篇神作。 本文是对(https://w…...

「专题速递」AR协作、智能NPC、数字人的应用与未来

元宇宙是一个融合了虚拟现实、增强现实、人工智能和云计算等技术的综合概念。它旨在创造一个高度沉浸式的虚拟环境&#xff0c;允许用户在其中交互、创造和共享内容。在元宇宙中&#xff0c;人们可以建立虚拟身份、参与虚拟社交&#xff0c;并享受无限的虚拟体验。 作为互联网大…...

什么是基于意图的网络(IBN)

基于意图的网络是一种网络技术&#xff0c;它根据业务意图&#xff08;来自网络管理员的服务请求&#xff09;配置 IT 基础架构&#xff0c;无需任何人工干预&#xff0c;它不断提供关键的网络见解&#xff0c;并不断调整硬件配置以确保满足意图&#xff0c;它将网络从以设备为…...

知识增强语言模型提示 零样本知识图谱问答10.8

知识增强语言模型提示 零样本知识图谱问答 摘要介绍相关工作方法零样本QA的LM提示知识增强的LM提示与知识问题相关的知识检索 摘要 大型语言模型&#xff08;LLM&#xff09;能够执行 零样本closed-book问答任务 &#xff0c;依靠其在预训练期间存储在参数中的内部知识。然而&…...

虚拟现实项目笔记:SDK、Assimp、DirectX Sample Browser、X86和X64

文章目录 SDK是什么Assimp是什么DirectX Sample Browser是什么X86和X64生成解决方案和重新生成解决方案 SDK是什么 SDK是Software Development Kit的英文缩写&#xff0c;意思是软件开发包。 软件开发包中往往包含有多种辅助进行软件开发的内容&#xff0c;包括一些软件开发工…...

openwrt rm500u ncm方式拨号步骤记录

1.进入设备页面 用户名&#xff1a;root 2.创建接口 3.配置接口 国内APN 信息 中国移动APN&#xff1a;CMNET 中国联通APN&#xff1a;3GNET 中国电信APN&#xff1a;CTNET 4.防火墙配置 5.点击Save&Apply 6.配置完成后重启设备。重新进入设备页面&#xff0c;可以看…...

使用js代码将一个值为“1=增量,2=全量“的字符串转化为一个数组,数据格式为[{value:““,label:“‘‘}]

const str "1增量&#xff0c;2全量"; const arr str.split(",").map(item > {const [value, label] item.split("");return { value, label}; });...

图片调色盘

图片预览 配置安装 Color-Thief 安装包使用文档 yarn add colorthief -S // npm install colorthief --save代码 <template><div class"img-thief"><div class"container"><div class"thief-item" v-for"(item, in…...

一文读懂Base64

这几天在和第三方交互的时候&#xff0c;对方返回的数据是base64格式的数据&#xff0c;所以这两天又彻底捋了下Base64的来龙去脉。之前看过一篇文章说的非常好&#xff08;再找到给加上链接&#xff09;&#xff0c;我在这不详细说明了&#xff0c;只说转换过程。 还是使用中…...

CCF CSP认证 历年题目自练 Day20

题目一 试题编号&#xff1a; 201903-1 试题名称&#xff1a; 小中大 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题描述&#xff1a; 题目分析&#xff08;个人理解&#xff09; 常规题目&#xff0c;先看输入&#xff0c;第一行输入n表示有多少数字&am…...

【Overload游戏引擎分析】从视图投影矩阵提取视锥体及overload对视锥体的封装

overoad代码中包含一段有意思的代码&#xff0c;可以从视图投影矩阵逆推出摄像机的视锥体&#xff0c;本文来分析一下原理 一、平面的方程 视锥体是用平面来表示的&#xff0c;所以先看看平面的数学表达。 平面方程可以由其法线N&#xff08;A, B, C&#xff09;和一个点Q(x0,…...

vue全局事件总线是什么?有什么用?解决了什么问题,与pinia有什么区别?

全局事件总线快速入门 概念基本概念&#xff08;是什么&#xff1f;&#xff09;核心概念 核心特性和优势(有什么用&#xff1f;)解决了什么问题&#xff1f;主要优势是什么&#xff1f; 案例演示&#xff1f;传递数据-案例演示传递事件-案例演示 与pinia有什么区别&#xff1f…...

【debian 12】:debian系统切换中文界面

目录 目录 项目场景 基础参数 原因分析 解决方案 1.ctrlaltT 打开终端 2.查询当前语言环境&#xff08;我的已经设置成了中文 zh_CN.UTF-8&#xff09; 3.打开语言配置界面 4.最后一步&#xff1a;重启 不要放弃任何一个机会&#xff01; 项目场景&#xff1a; 这两…...

es官方为我们提供的堆内存保护机制-熔断器( breaker )

总熔断器&#xff08;相当于似乎总闸&#xff09; 参数&#xff1a; indices.breaker.total.use_real_memory 默认值&#xff1a;true 在 elasticsearch.yml中配置。 参数&#xff1a; indices.breaker.total.limit 如果 indices.breaker.total.use_real_memory : true, in…...

靶场通关记录

OSCP系列靶场-Esay-CyberSploit1 总结 getwebshell → 源码注释发现用户名 → robots.txt发现base64密码 → SSH登录 提 权 思 路 → 内网信息收集 → 发现发行版本有点老 → 内核overlayfs提权 准备工作 启动VPN 获取攻击机IP > 192.168.45.220 启动靶机 获取目标机器I…...

全网最新最全的软件测试面试题

一、前言 与开发工程师相比&#xff0c;软件测试工程师前期可能不会太深&#xff0c;但涉及面还是很广的。 在一年左右的实习生或岗位的早期面试中&#xff0c;主要是问一些基本的问题。 涉及到的知识主要包括MySQL数据库的使用、Linux操作系统的使用、软件测试框架问题、测试…...

如何列出 Ubuntu 和 Debian 上已安装的软件包

当你安装了 Ubuntu 并想好好用一用。但在将来某个时候&#xff0c;你肯定会遇到忘记曾经安装了那些软件包。 这个是完全正常。没有人要求你把系统里所有已安装的软件包都记住。但是问题是&#xff0c;如何才能知道已经安装了哪些软件包&#xff1f;如何查看安装过的软件包呢&a…...

图论---最小生成树问题

在连通网的所有生成树中&#xff0c;所有边的代价和最小的生成树&#xff0c;称为最小生成树。解决最小生成树问题一般有两种算法&#xff1a;Kruskal算法和Prim算法。 Kruskal算法 原理&#xff1a;基本思想是从小到大加入边&#xff0c;是个贪心算法。我们将图中的每个边按…...

elementplus 时间范围选择器限制选择时间范围

<el-date-pickerv-model"form.time" type"daterange"range-separator"-"start-placeholder"开始时间"end-placeholder"结束":disabled-date"disabledDate"calendar-Change"calendarChange" />co…...

【网络】抓包工具Wireshark下载安装和基本使用教程

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1…...

Metasequoia 4 水杉3D建模工具 附序列号

Metasequoia 4是一款非常强大的3D水杉建模工具&#xff0c;它基于多边形建模技术&#xff0c;可以用于创建各种对象并支持多种第三方3DCG软件的文件格式&#xff0c;是一款非常适合从爱好到业务&#xff0c;支持3D电脑绘图&#xff0c;3D印刷&#xff0c;游戏开发等的3D建模软件…...

股票杠杆交易平台排名:淘配网推荐的十大平台

在投资世界中&#xff0c;股票杠杆交易一直以其提供更高回报机会的吸引力而备受欢迎。随着市场的不断发展&#xff0c;出现了越来越多的股票杠杆交易平台。本文将为您介绍淘配网推荐的十大股票杠杆交易平台&#xff0c;并分析它们的特点。 富灯网 - 富灯网以其全面的杠杆产品和…...

CoreData + CloudKit 在初始化 Schema 时报错 A Core Data error occurred 的解决

问题现象 如果希望为 CoreData 支持的 App 增加云数据备份和同步功能,那么 CloudKit 是绝佳的选择。CloudKit 会帮我们默默处理好一切,我们基本不用为升级而操心。 不过,有时在用本地 CoreData NSManagedObjectModel 初始化 iCloud 中的 Schema 时会发生如下错误: Error …...

修炼k8s+flink+hdfs+dlink(三:安装dlink)

一&#xff1a;mysql初始化。 mysql -uroot -p123456 create database dinky; grant all privileges on dinky.* to dinky% identified by dinky with grant option; flush privileges;二&#xff1a;上传dinky。 上传至目录/opt/app/dlink tar -zxvf dlink-release-0.7.4.t…...

Linux 系统性能瓶颈分析(超详细)

Author&#xff1a;rab 目录 前言一、性能指标1.1 进程1.1.1 进程定义1.1.2 进程状态1.1.3 进程优先级1.1.4 进程与程序间的关系1.1.5 进程与进程间的关系1.1.6 进程与线程的关系 1.2 内存1.2.1 物理内存与虚拟内存1.2.2 页高速缓存与页写回机制1.2.3 Swap Space 1.3 文件系统1…...

kafka与zookeeper的集群

基础配置 systemctl stop firewalld && systemctl disable firewalld setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/configvi /etc/hosts ip1 node1 ip2 node2 ip3 node3zookeeper介绍 zookeeper是一个分布式的协调服务&#xff0c;主要用…...

sqlalchemy 连接池

报错 sqlalchemy.exc.TimeoutError: QueuePool limit of size 100 overflow 10 reached, connection timed out, timeout 30 (Background on this error at: http://sqlalche.me/e/3o7r) 查看数据库未活动超时时间 show variables like "interactive_timeout";一般…...

用Blender制作YOLO目标检测器训练数据

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 本文将介绍一种非常有吸引力的机器学习训练数据的替代方案&#xff0c;用于为给定的特定应用程序收集数据。 无论应用程序类型如何&#xff0c;这篇博文都旨在向读者展示使用 Blender 等开源资源生成合成数据&#xff08;S…...

c++视觉处理---均值滤波

均值滤波 cv::blur()函数是OpenCV中用于应用均值滤波的函数。均值滤波是一种简单的平滑技术&#xff0c;它计算每个像素周围像素的平均值&#xff0c;并用该平均值替代原始像素值。这有助于降低图像中的噪声&#xff0c;并可以模糊图像的细节。 以下是cv::blur()函数的基本用…...

重庆网站推广营销代理/seo排名优化教学

背景简述 在图像处理&#xff0c;我们知道经常把Laplace算子作为边缘检测之一&#xff0c;也是工程数学中常用的一种积分变换。本节主要介绍Laplacian 算子相关的知识。 基本理论 首先&#xff0c;拉普拉斯算子是最简单的各向同性微分算子&#xff0c;它具有旋转不变性。一个…...

如何做经营性网站备案/搜索引擎优化百度

夜光序言&#xff1a; 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼前的风景已经和从前不一样了。 没有什么路是白走的&#xff0c;没有什么事情是白做的&#xff0c;这些看似无意义的事情&#xff0c;都是成长的基石。 正…...

wordpress 图片叠加/百度首页网站推广多少钱一年

科学计数法使用e标识数值&#xff0c;将科学计算学转化为数字的思路&#xff1a;按e右边的数字移动小数点位数。e右边的数字如果是负数&#xff0c;则向左移动小数点。示例如下:1.2345678e2 123.456781.2345678e-2 0.0123456781.7615562e06 1761556.21.87982e7 187982001e3…...

个人网站建设平台/百度问答库

小编典典您无法使用纯PHP做到这一点。您必须使用JavaScript来完成。有几篇有关如何执行此操作的文章。本质上&#xff0c;您可以设置cookie&#xff0c;甚至可以执行一些Ajax来将信息发送到PHP脚本。如果使用jQuery&#xff0c;则可以执行以下操作&#xff1a;jQuery&#xff1…...

企业网站建设发展历程/seo网站优化论文

为了提供更好的信号完整性&#xff0c;DDR3的memory controller可以使用write leveling来调整DQS差分对和CK差分对的相对位置&#xff0c;利用DQS差分对路径上的可调整延时来达成该目的。 对于简单的运用&#xff0c;比如on-board DDR memory&#xff0c;并且仅有一颗DDR内存的…...

wordpress cms 布局/长春做网站公司长春seo公司

1、echo count(“abc”); 输出什么&#xff1f; 答&#xff1a;"1"count — 计算数组中的单元数目或对象中的属性个数int count ( mixed $var [, int $mode ] ), 如果 var 不是数组类型或者实现了 Countable 接口的对象&#xff0c;将返回 1&#xff0c; 有一个例…...