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

买卖股票的最佳时机 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. 买卖股票的最佳时机 自己的思路&#xff1a;采用求最长连续子串和题目的思路 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&#xff08;Liquid Crystal Display&#xff09;是一种工业字符型液晶&#xff0c;能够同时显示 1602 即 32 字符(16列两行) 第 1 脚: VSS 为电源地 第 2 脚: VDD 接 5V 正电源 第 3 脚: VL 为液晶显示器对比度调整端,接正电源时对比度最弱&#xff0c;接地时对比度最…...

英雄算法学习路线

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

【设计模式】备忘录模式和迭代器模式

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

rapidcsv 写csv文件实例

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

数据库--进阶篇--9--存储引擎

MySQL体系结构 索引是在引擎层&#xff0c;所以不同的存储引擎&#xff0c;它的索引结构不同。 存储引擎简介 存储引擎就是存储数据、建立所以、更新/查询数据等技术的实现方式。存储引擎是基于表的&#xff0c;而不是基于库的&#xff0c;所以存储引擎也可以被称为表类型。 …...

物品的管理的隐私政策

本应用尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务&#xff0c;本应用会按照本隐私权政策的规定使用和披露您的个人信息。但本应用将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外&#xff0c;在未征得您事先许可的情况下…...

深度解析首个Layer3 链 Nautilus Chain,有何优势?

以流支付为主要概念的Zebec生态&#xff0c;正在推动流支付这种新兴的支付方式向更远的方向发展&#xff0c;该生态最初以Zebec Protocol的形态发展&#xff0c;并从初期的Solana进一步拓展至BNB Chian以及Near上。与此同时&#xff0c;Zebec生态也在积极的寻求从协议形态向公链…...

配对变量t检验

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

蓝桥杯三月刷题 第八天

文章目录&#x1f4a5;前言&#x1f609;解题报告&#x1f4a5;分数&#x1f914;一、思路:&#x1f60e;二、代码&#xff1a;&#x1f4a5;回文日期&#x1f914;一、思路:&#x1f60e;二、代码&#xff1a;&#x1f4a5;迷宫&#x1f914;一、思路:&#x1f60e;二、代码&a…...

EXCEL技能点3-常用技能1

1 引用格式 公式中引用单元格或者区域时,引用的类型可分为以下三种: 绝对引用 相对引用 混合引用 在Excel里&#xff0c;每个单元格都有一个编码&#xff0c;就像人的身份证一样&#xff0c;在Excel里是按照行列进行编码&#xff0c;例如A1就是第一列的第一行。 那么我们想要引…...

经典分类模型回顾16-AlexNet实现垃圾分类(Tensorflow2.0版)

AlexNet是2012年由亚历克斯克里斯托夫&#xff08;Alex Krizhevsky&#xff09;等人提出的一种卷积神经网络结构&#xff0c;它在ImageNet图像识别比赛中获得了第一名&#xff0c;标志着卷积神经网络的崛起。 AlexNet的结构包括8层网络&#xff0c;其中前5层为卷积层&#xff…...

vue3使用vuex

第一步安装&#xff1a; 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&#xff08;XD-MDPN100&#xff09;网关改善网络场景&#xff0c;变频器有掉线或数据丢失报警&#xff0c;影响系统的正常运行&#xff0c;将5台 ME300变频器modbus转Profinet到1200PLC&#xff0c;通过网关还可以实现Profinet转modbus RTU协议转…...

多校园SaaS运营智慧校园云平台源码 智慧校园移动小程序源码

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

用DQN实现Atari game(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 强化学习研究的是Agent和环境交互中如何学习最优策略&#xff0c;以获得最大收益。Agent需要能够观察环境(observe)所处的状态&…...

【JavaSE专栏11】Java的 if 条件语句

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…...

【opensea】opensea-js 升级 Seaport v1.4 导致的问题及解决笔记

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

JS语法(扫盲)

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

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL&#xff08;Hardware Description language&#xff09; 在解释HDL之前&#xff0c;先来了解一下数字系统设计的流程&#xff1a;逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端&#xff0c;在这个过程中就需要用到HDL&#xff0c;正文…...

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用

摘要 神经影像技术对医学科学产生了深远的影响&#xff0c;推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下&#xff0c;基于神经血管耦合现象的多模态神经影像方法&#xff0c;通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里&#xff0c;本研…...