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

leetcode 股票问题全序列

1 只允许一次交易,121题,买卖股票的最佳时机

class Solution {/*给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。*/
public:int maxProfit(vector<int>& prices) {if(prices.size()<2){return 0;}int maxP=0x80000000;int minPrice=prices[0];for(int i=1;i<prices.size();i++){if(minPrice>prices[i]){minPrice=prices[i];}maxP=max(maxP,prices[i]-minPrice);}return maxP;}
};

2 可以交易多次,122题, 买卖股票的最佳时机2

class Solution {/*题目:给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
题解:
贪心
因为不限制交易次数,只要今天价格比昨天高,就交易,利润为正累加,最后的和就是最大的利润*/
public:int maxProfit(vector<int>& prices) {if(prices.size()<2){return 0;}int res=0;for(int i=0;i<prices.size()-1;i++){if(prices[i+1]>prices[i]){res+=(prices[i+1]-prices[i]);}}return res;}
};

3 最多2次交易,123题, 买卖股票的最佳时机3

class Solution {/*给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。题解:动态规划:dp[i][j] 中 i 表示第 i 天,j为 [0−4]五个状态,dp[i][j]表示第i天状态j所得最大现金j=0无操作 =1第一次买入,=2第一次卖出,=3第二次买入,=4第二次卖出|buy|buy|sell|sell|sell|buy|buy||---|---|----|----|----|---|---||    |当天第一次 保持卖出*/
public:int maxProfit(vector<int>& prices) {if(prices.size()<1){return 0;}// dp[i][j]表示第i天状态j所得最大现金vector<vector<int>>dp(prices.size(),vector<int>(5,0));// initdp[0][0]=0;dp[0][1]=-prices[0];dp[0][2]=0;//第一天就卖出 相当于第一次买入后又卖出了dp[0][3]=-prices[0];// 第二次买入依赖于第一次卖出的状态,其实相当于第0天第一次买入了,第一次卖出了,// 然后再买入一次(第二次买入),那么现在手头上没有现金,只要买入,现金就做相应的减少dp[0][4]=0;for(int i=1;i<prices.size();i++){// 1. 第i天无操作,则之前也是没有操作dp[i][0]=dp[i-1][0];// 2. 第i天第一次买入dp[i][1]=max(dp[i-1][1],//前一天买入,当天保持dp[i-1][0]-prices[i]//当天买入,前一天还是没有操作);// 3. 第i天第一次卖出dp[i][2]=max(dp[i-1][2],//前一天卖出,当天保持dp[i-1][1]+prices[i]//当天第一次卖出,前一天还是第一次买入);// 4. 第i天第二次买入dp[i][3]=max(dp[i-1][3],//前一天买入,当天保持dp[i-1][2]-prices[i]//当天买入,前一天还是第一次卖出);// 5. 第i天第二次卖出dp[i][4]=max(dp[i-1][4],//前一天卖出,当天保持dp[i-1][3]+prices[i]//当天第二次卖出,前一天还是第二次买入);}return dp[prices.size()-1][4];}
};

4. 最多k次交易,188题,买卖股票的最佳时间4

class Solution {/*题目:给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说,你最多可以买 k 次,卖 k 次。题解:定义一个三维数组dp[n][k][2]这里n表示天数,dp[i][j][0]:表示第i天交易了j次时卖出后的累计最大利润dp[i][j][1]:表示第i天交易了j次时买入后的累计最大利润1. 第一次买入:要么前一天买入后保持,要么从初始态第一次买入dp[i][0][1]=max(dp[i-1][0][1],dp[i-1][0][0]-prices[i])第一次卖出(注意已经完成一次交易这里j=1):要么前一天卖出后保持,要么从前一天第一次买入后,当天卖出dp[i][1][0]=max(dp[i-1][1][0],dp[i-1][0][1]+prices[i])2. 第二次买入:要么前一天买入后保持,要么从前一天第一次卖出后当天第二次买入dp[i][1][1]=max(dp[i-1][1][1],dp[i-1][1][0]-prices[i])第二次卖出(注意已经完成一次交易这里j=2):要么前一天卖出后保持,要么从前一天第二次买入后,当天卖出dp[i][2][0]=max(dp[i-1][2][0],dp[i-1][1][1]+prices[i])...j. 第j次买入:要么前一天买入后保持,要么从前一天第j-1次卖出后当天第二次买入dp[i][j-1][1]=max(dp[i-1][j-1][1],dp[i-1][j-1][0]-prices[i])第二次卖出(注意已经完成一次交易这里j=j):要么前一天卖出后保持,要么从前一天第j次买入后,当天卖出dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j-1][1]+prices[i])initfor(int i = 0; i <= k; ++i) {dp[0][i][0] = 0;// 第一天,不管交易多少次,卖出都是0收入dp[0][i][1] = -prices[0]; // 第一天,不管交易多少次,买入的收入是-prices[0]}三维数组太高了进行压缩,从上面DP公式可以知道,可以去掉天数纬度,用二维数组dp[k][2]来表示则有:dp[j-1][1]=max(dp[j-1][1],dp[j-1][0]-prices[i])dp[j][0]=max(dp[j][0],dp[j-1][1]+prices[i])*/
public:int maxProfit122(vector<int>&prices){// 不限制次数的交易if(prices.size()<2){return 0;}int res=0;for(int i=0;i<prices.size()-1;i++){if(prices[i+1]>prices[i]){res+=prices[i+1]-prices[i];}}return res;}int maxProfit(int k, vector<int>& prices) {int n=prices.size();if(k>=n){// 类似122题,不限制次数的交易return maxProfit122(prices);}// dp[j][z]交易第j次z=0时候卖出后的收益,// dp[j][z]交易第j次z=1时候买入后的收益vector<vector<int>>dp(k+1,vector<int>(2,0));// init 根据三维降级而得,第一天for(int i=0;i<k;i++){dp[i][0]=0;//第一天无论交易多少次,卖出后的收益都是0dp[i][1]=-prices[0];//第一天无论交易多少次,买入后的收益都是-price[0]}for(int i=1;i<prices.size();i++){for(int j=1;j<=k;j++){dp[j-1][1]=max(dp[j-1][1],dp[j-1][0]-prices[i]);dp[j][0]=max(dp[j][0],dp[j-1][1]+prices[i]);}}return dp[k][0];}
};

相关文章:

leetcode 股票问题全序列

1 只允许一次交易&#xff0c;121题&#xff0c;买卖股票的最佳时机 class Solution {/*给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票…...

SpringBoot中日志的使用log4j2

SpringBoot中日志的使用log4j2 1、log4j2介绍 Apache Log4j2 是对 Log4j 的升级&#xff0c;它比其前身 Log4j 1.x 提供了重大改进&#xff0c;并提供了 Logback 中可用的许多改 进&#xff0c;同时修复了 Logback 架构中的一些问题&#xff0c;主要有&#xff1a; 异常处理…...

机械设备企业网站建设的效果如何

机械设备涵盖的类目比较广&#xff0c;其市场需求也是稳增不减&#xff0c;也因此无论大小企业都有增长的机会&#xff0c;当然这也需要靠谱的工具及正确的决策。 对机械设备企业来说&#xff0c;产品品质自然是首位&#xff0c;而向外打造品牌、扩展信息及拓客转化自然也是非…...

设计模式之结构型设计模式(二):工厂模式 抽象工厂模式 建造者模式

工厂模式 Factory 1、什么是工厂模式 工厂模式旨在提供一种统一的接口来创建对象&#xff0c;而将具体的对象实例化的过程延迟到子类或者具体实现中。有助于降低客户端代码与被创建对象之间的耦合度&#xff0c;提高代码的灵活性和可维护性。 定义了一个创建对象的接口&…...

算法模板之单链表图文讲解

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;算法模板、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️使用数组模拟单链表讲解1.1 &#x1f514;为什么我们要使用数组去模拟单链表…...

【强化学习-读书笔记】表格型问题的 Model-Free 方法

参考 Reinforcement Learning, Second Edition An Introduction By Richard S. Sutton and Andrew G. Barto无模型方法 在前面的文章中&#xff0c;我们介绍的是有模型方法&#xff08;Model-Based&#xff09;。在强化学习中&#xff0c;"Model"可以理解为算法…...

【手撕算法系列】k-means

k-means k-means算法介绍 k-means算法介绍 K-means算法是一种用于聚类的迭代算法&#xff0c;它将数据集划分为K个簇&#xff0c;其中每个数据点属于与其最近的簇的中心。这个算法的目标是最小化簇内的平方和误差&#xff08;簇内数据点与簇中心的距离的平方和&#xff09;。 …...

D33|动态规划!启程!

1.动态规划五部曲&#xff1a; 1&#xff09;确定dp数组&#xff08;dp table&#xff09;以及下标的含义 2&#xff09;确定递推公式 3&#xff09;dp数组如何初始化 4&#xff09;确定遍历顺序 5&#xff09;举例推导dp数组 2.动态规划应该如何debug 找问题的最好方式就是把…...

C语言----文件操作(二)

在上一篇文章中我们简单介绍了在C语言中文件是什么以及文件的打开和关闭操作&#xff0c;在实际工作中&#xff0c;我们不仅仅是要打开和关闭文件&#xff0c;二是需要对文件进行增删改写。本文将详细介绍如果对文件进行安全读写。 一&#xff0c;以字符形式读写文件&#xff…...

oracle 10046事件跟踪

10046事件是一个很好的排查sql语句执行缓慢的内部事件&#xff0c;具体设置方式如下&#xff1a; 根据10046事件跟踪SQL语句 1、 alter session set events 10046 trace name context forever,level 12; 2、执行SQL语句 3、关闭10046事件 alter session set events 10046 trace…...

微软自带浏览器Edge,无法关闭“保存历史记录网站的屏幕截图”解决方案

微软自带浏览器Edge&#xff0c;无法关闭“保存历史记录网站的屏幕截图”解决方案 吐槽1&#xff1a;Windows自带的Chrome内核版本的浏览器Microsofg Edge刚发布时可谓一股清流&#xff0c;启动速度快&#xff0c;占用内存较小&#xff0c;相信很多人也开始抛弃正代Chrome&…...

讲座 | 颠覆传统摄像方式乃至计算机视觉的“脉冲视觉”

传统相机拍摄视频时其实是以一定帧率进行采样&#xff0c;视频其实还是一串图片的集合&#xff0c;因此低帧率时会觉得视频卡&#xff0c;拍摄高速运动物体时会有运动模糊等等问题。然而你能想象这一切都可以被“脉冲视觉”这一前沿技术改变吗&#xff1f; 今天下午听了北京大学…...

uniGUI学习之UniHTMLMemo1富文本编辑器

1]系统自带的富文本编辑器 2]jQueryBootstarp富文本编辑器插件summernote.js 1]系统自带的富文本编辑器 1、末尾增加<p> 2、增加字体 3、解决滚屏问题 4、输入长度限制问题 5、显示 并 编辑 HTML源代码(主要是图片处理) 1、末尾增加<p> UniHTMLMemo1.Lines…...

详细教程 - 从零开发 鸿蒙harmonyOS应用 第四节 (鸿蒙Stage模型 登录页面 ArkTS版 推荐使用)

在鸿蒙OS中&#xff0c;Ability是应用程序提供的抽象功能&#xff0c;可以理解为一种功能。在应用程序中&#xff0c;一个页面即一种能力&#xff0c;如登录页面&#xff0c;即具有登录功能的能力。以下是对鸿蒙新建项目的登录代码功能的详细解读和工作流程的描述&#xff1a; …...

uniapp怎么实现授权登录

在Uniapp中实现授权登录通常涉及以下几个步骤&#xff1a; 创建登录按钮&#xff1a;在页面中创建一个按钮&#xff0c;用于触发登录操作。 获取用户授权&#xff1a;当用户点击登录按钮时&#xff0c;调用uni.login或uni.getUserInfo等API获取用户授权。 处理授权回调&#…...

从零开始:前端架构师的基础建设和架构设计之路

文章目录 一、引言二、前端架构师的职责三、基础建设四、架构设计思想五、总结《前端架构师&#xff1a;基础建设与架构设计思想》编辑推荐内容简介作者简介目录获取方式 一、引言 在现代软件开发中&#xff0c;前端开发已经成为了一个不可或缺的部分。随着互联网的普及和移动…...

椋鸟C语言笔记#26:数据在内存中的存储(大小端字节序)、浮点数的存储(IEEE754)

萌新的学习笔记&#xff0c;写错了恳请斧正。 目录 大小端字节序 什么是大小端 写一个判断大小端的程序 浮点数在内存中的存储&#xff08;IEEE 754规则&#xff09; 引入 存储规则解释 读取规则解释 1.阶码不全为0或全为1&#xff08;规格化数&#xff09; 2.阶码全为…...

设计模式——组合模式(结构型)

引言 组合模式是一种结构型设计模式&#xff0c; 你可以使用它将对象组合成树状结构&#xff0c; 并且能像使用独立对象一样使用它们。 问题 如果应用的核心模型能用树状结构表示&#xff0c; 在应用中使用组合模式才有价值。 例如&#xff0c; 你有两类对象&#xff1a; ​…...

鸿蒙小车之多任务调度实验

说到鸿蒙我们都会想到华为mate60&#xff1a;遥遥领先&#xff01;我们一直领先&#xff01; 我们这个小车也是采用的是鸿蒙操作系统&#xff0c;学习鸿蒙小车&#xff0c;让你遥遥领先于你的同学。 文章目录 前言一、什么是任务&#xff1f;为什么要有任务二、任务的状态三、任…...

【报错栏】(vue)Module not found: Error: Can‘t resolve ‘element-ui‘ in xxx

Module not found: Error: Cant resolve element-ui in xxx 报错原因是&#xff1a; 未安装 element-ui 依赖 解决&#xff1a; npm install element-ui 运行...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...