买卖股票的最佳时机 I II III IV
121. 买卖股票的最佳时机
自己的思路:采用求最长连续子串和题目的思路
class Solution {public int maxProfit(int[] prices) {if(prices.length == 1) return 0;int[] nums = new int[prices.length - 1];for(int i = 0;i < prices.length - 1;i++){nums[i] = prices[i + 1] - prices[i];}int[] dp = new int[prices.length - 1];dp[0] = nums[0];int res = nums[0];for(int i = 1;i < dp.length;i++){dp[i] = Math.max(dp[i-1] + nums[i],nums[i]);res = Math.max(dp[i],res);}return res < 0 ? 0:res;}
}
贪心思路:
class Solution {public int maxProfit(int[] prices) {int low = Integer.MAX_VALUE;int result = 0;for(int i = 0;i < prices.length;i++){low = Math.min(low,prices[i]);result = Math.max(result,prices[i] - low);}return result;}
}
dp[i][0] dp[i][1] 表示第i天持有股票所得最多现金.
持有股票dp[i][0]:
1.之前就持有股票dp[i - 1][0]
2.现在刚持有也就是买入股票-prices[i]
不持有股票dp[i][1]:
1.之前就不持有股票dp[i - 1][1]
2.现在刚不持有也就是卖掉股票dp[i - 1][0] + prices[i]
class Solution {public int maxProfit(int[] prices) {if (prices == null || prices.length == 0) return 0;int length = prices.length;int[][] dp = new int[length][2];int result = 0;dp[0][0] = -prices[0];dp[0][1] = 0;for (int i = 1; i < length; i++) {dp[i][0] = Math.max(dp[i - 1][0], -prices[i]);dp[i][1] = Math.max(dp[i - 1][0] + prices[i], dp[i - 1][1]);}return dp[length - 1][1];}
}
优化空间复杂度,不需要那么长的数组只需要两块。
class Solution {public int maxProfit(int[] prices) {if (prices == null || prices.length == 0) return 0;int length = prices.length;int[] dp = new int[2];int result = 0;dp[0] = -prices[0];dp[1] = 0;for (int i = 1; i < length; i++) {dp[0] = Math.max(dp[0], -prices[i]);dp[1] = Math.max(dp[0] + prices[i], dp[1]);}return dp[1];}
}
122. 买卖股票的最佳时机 II
贪心算法:
class Solution {public int maxProfit(int[] prices) {if(prices.length == 1) return 0;int[] nums = new int[prices.length - 1];for(int i = 0;i < prices.length - 1;i++){nums[i] = prices[i + 1] - prices[i];}int result = 0;for(int i = 0;i < nums.length;i++){if(nums[i] > 0){result += nums[i];}}return result;}
}
而本题,因为一只股票可以买卖多次,所以当第i天买入股票的时候,所持有的现金可能有之前买卖过的利润。
那么第i天持有股票即dp[i][0],如果是第i天买入股票,所得现金就是昨天不持有股票的所得现金 减去 今天的股票价格 即:dp[i - 1][1] - prices[i]。
dp[i-1][1] - price[i]是之前之前买卖过的利润 再减去当前买入
// 优化空间
class Solution {public int maxProfit(int[] prices) {int[] dp = new int[2];// 0表示持有,1表示卖出dp[0] = -prices[0];dp[1] = 0;for(int i = 1; i <= prices.length; i++){// 前一天持有; 既然不限制交易次数,那么再次买股票时,要加上之前的收益//与上一题唯一不同点dp[0] = Math.max(dp[0], dp[1] - prices[i-1]);// 前一天卖出; 或当天卖出,当天卖出,得先持有dp[1] = Math.max(dp[1], dp[0] + prices[i-1]);}return dp[1];}
}
123. 买卖股票的最佳时机 III
class Solution {public int maxProfit(int[] prices) {int len = prices.length;if(len == 0) return 0;int[][] dp = new int[len][5];dp[0][1] -= prices[0];dp[0][3] -= prices[0];for(int i = 1;i < prices.length;i++){dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]-prices[i]);dp[i][2] = Math.max(dp[i-1][2],dp[i-1][1]+prices[i]);dp[i][3] = Math.max(dp[i-1][3],dp[i-1][2]-prices[i]);dp[i][4] = Math.max(dp[i-1][4],dp[i-1][3]+prices[i]);}return dp[len - 1][4];}
}
class Solution {public int maxProfit(int[] prices) {int len = prices.length;if(len == 0) return 0;int[] dp = new int[5];dp[1] -= prices[0];dp[3] -= prices[0];for(int i = 1;i < len;i++){dp[1] = Math.max(dp[1],dp[0]-prices[i]);dp[2] = Math.max(dp[2],dp[1]+prices[i]);dp[3] = Math.max(dp[3],dp[2]-prices[i]);dp[4] = Math.max(dp[4],dp[3]+prices[i]);}return dp[4];}
}
188. 买卖股票的最佳时机 IV
和上一题思路一致
class Solution {public int maxProfit(int k, int[] prices) {int[] dp = new int[2*k + 1];for(int i = 0;i < 2*k + 1;i++){if(i % 2 == 1){dp[i] = -prices[0];}}for(int i = 0;i < prices.length;i++){for(int j = 1;j < 2*k+1;j++){int temp = j % 2 == 1?-prices[i]:prices[i];dp[j] = Math.max(dp[j],dp[j-1]+temp);}}return dp[2*k];}
}
相关文章:

买卖股票的最佳时机 I II III IV
121. 买卖股票的最佳时机 自己的思路:采用求最长连续子串和题目的思路 class Solution {public int maxProfit(int[] prices) {if(prices.length 1) return 0;int[] nums new int[prices.length - 1];for(int i 0;i < prices.length - 1;i){nums[i] prices[…...

STM32—LCD1602
LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 1602 即 32 字符(16列两行) 第 1 脚: VSS 为电源地 第 2 脚: VDD 接 5V 正电源 第 3 脚: VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最…...

英雄算法学习路线
文章目录零、自我介绍一、关于拜师二、关于编程语言三、算法学习路线1、算法集训1)九日集训2)每月算法集训2、算法专栏3、算法总包四、英雄算法联盟1、英雄算法联盟是什么?2、如何加入英雄算法联盟?3、为何会有英雄算法联盟&#…...

【设计模式】备忘录模式和迭代器模式
备忘录模式和迭代器模式备忘录模式代码示例迭代器模式代码示例使用迭代器遍历集合的同时不能删除/增加元素总结备忘录模式 备忘录模式,也叫快照(Snapshot)模式。 在 GoF的《设计模式》⼀书中,备忘录模式是这么定义的:…...

rapidcsv 写csv文件实例
csv实质是一个文本文件,可以使用rapidcsv写文件操作,如下实例: 第一行实质是从-1行开始,列是从0开始 #include "rapidcsv.h" #include <string> using namespace std; void CMFCApplication1Dlg::OnBnClickedBu…...

数据库--进阶篇--9--存储引擎
MySQL体系结构 索引是在引擎层,所以不同的存储引擎,它的索引结构不同。 存储引擎简介 存储引擎就是存储数据、建立所以、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以被称为表类型。 …...
物品的管理的隐私政策
本应用尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息。但本应用将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下…...

深度解析首个Layer3 链 Nautilus Chain,有何优势?
以流支付为主要概念的Zebec生态,正在推动流支付这种新兴的支付方式向更远的方向发展,该生态最初以Zebec Protocol的形态发展,并从初期的Solana进一步拓展至BNB Chian以及Near上。与此同时,Zebec生态也在积极的寻求从协议形态向公链…...

配对变量t检验
区别双变量t检验,见:https://mp.csdn.net/postedit/100640098 配对变量为两两相关的变量:如敷药前后体重变化。 要求:两变量服从正态分布。 SPSS演练 打开数据文件:ptest.sav 载地址:https://download.c…...

蓝桥杯三月刷题 第八天
文章目录💥前言😉解题报告💥分数🤔一、思路:😎二、代码:💥回文日期🤔一、思路:😎二、代码:💥迷宫🤔一、思路:😎二、代码&a…...

EXCEL技能点3-常用技能1
1 引用格式 公式中引用单元格或者区域时,引用的类型可分为以下三种: 绝对引用 相对引用 混合引用 在Excel里,每个单元格都有一个编码,就像人的身份证一样,在Excel里是按照行列进行编码,例如A1就是第一列的第一行。 那么我们想要引…...
经典分类模型回顾16-AlexNet实现垃圾分类(Tensorflow2.0版)
AlexNet是2012年由亚历克斯克里斯托夫(Alex Krizhevsky)等人提出的一种卷积神经网络结构,它在ImageNet图像识别比赛中获得了第一名,标志着卷积神经网络的崛起。 AlexNet的结构包括8层网络,其中前5层为卷积层ÿ…...
vue3使用vuex
第一步安装: package.json { "name": "demo", "version": "0.1.0", "private": true, "scripts": { "serve": "vue-cli-service serve", "build": "vue-c…...

Java面向对象:抽象类的学习
本文介绍了抽象类的基本语法概念,什么是抽象类. Java中抽象类的语法,抽象类的特性 抽象类的作用(抽象类和普通类的区别) 用抽象类实现多态… 抽象类的学习一.什么是抽象类二.抽象类语法三.抽象类的特性四.抽象类的作用五. 抽象类实现多态一.什么是抽象类 在面向对象的概念中&am…...

modbus转profinet网关连接5台台达ME300变频器案例
通过兴达易控Modbus转Profinet(XD-MDPN100)网关改善网络场景,变频器有掉线或数据丢失报警,影响系统的正常运行,将5台 ME300变频器modbus转Profinet到1200PLC,通过网关还可以实现Profinet转modbus RTU协议转…...

多校园SaaS运营智慧校园云平台源码 智慧校园移动小程序源码
智慧校园管理平台源码 智慧校园云平台源码 智慧校园全套源码包含:电子班牌管理系统、成绩管理系统、考勤人脸刷卡管理系统、综合素养评价系统、请假管理系统、电子班牌发布系统、校务管理系统、小程序移动端、教师后台管理系统、SaaS运营云平台(支持多学…...

用DQN实现Atari game(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨💻4 Matlab代码 💥1 概述 强化学习研究的是Agent和环境交互中如何学习最优策略,以获得最大收益。Agent需要能够观察环境(observe)所处的状态&…...

【JavaSE专栏11】Java的 if 条件语句
作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…...

【opensea】opensea-js 升级 Seaport v1.4 导致的问题及解决笔记
一、opensea 协议升级导致旧包不能使用了 我使用的是 “opensea-js”: "^4.0.12” 版本当SDK。于2023年3月9日之后,不能使用了,需要升级到 Seaport v1.4 协议的包。 报错如下: Error: API Error 400: Please provide an OPEN order type when us…...

JS语法(扫盲)
文章目录一、初识JavaScript二、第一个JS程序JS代码的引入JS程序的输出三、语法变量使用动态类型内置类型运算符强类型语言&弱类型语言条件语句循环语句数组创建数组获取数组元素新增数组元素删除数组元素函数语法格式形参实参个数的问题匿名函数&函数表达式作用域作用…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...