【算法刷题】Day28
文章目录
- 1. 买卖股票的最佳时机 III
- 题干:
- 算法原理:
- 1. 状态表示:
- 2. 状态转移方程
- 3. 初始化
- 4. 填表顺序
- 5. 返回值
- 代码:
- 2. Z 字形变换
- 题干:
- 算法原理:
- 1. 模拟
- 2. 找规律
- 代码:
1. 买卖股票的最佳时机 III

原题链接
题干:
第 i 个元素是一支给定的股票在第 i 天的价格
最多可以完成 两笔 交易
注意:你不能同时参与多笔交易

算法原理:
1. 状态表示:

dp[i] 表示:第 i 天结束之后,所能获得的最大利润
f[i][j] 表示:第 i 天结束之后,完成了 j 次交易,此时处于“买入”状态下的,最大利润
g[i][j] 表示:第 i 天结束之后,完成了 j 次交易,此时处于“卖出”状态下的,最大利润
2. 状态转移方程

f[i][j] = Math.max(f[i - 1][j], g[i - 1][j] - prices[i])
g[i][j] = g[i - 1][j]
if(j - 1 >= 0) {
g[i][j] = Math.max(g[i][j], f[i - 1][j - 1] + prices[i]);
}
3. 初始化


4. 填表顺序
从上往下填写每一行
每一行从左往右,两个表一起填
5. 返回值
g 表的最后一行里面的最大值
代码:
class Solution {public int maxProfit(int[] prices) {int n = prices.length;int INF = 0x3f3f3f3f;int[][] f = new int[n][3];int[][] g = new int[n][3];for(int j = 0; j < 3; j++) {f[0][j] = g[0][j] = -INF;}f[0][0] = -prices[0];g[0][0] = 0;for(int i = 1; i < n; i++) {for(int j = 0; j < 3; j++) {f[i][j] = Math.max(f[i - 1][j], g[i - 1][j] - prices[i]);g[i][j] = g[i - 1][j];if(j - 1 >= 0) {g[i][j] = Math.max(g[i][j], f[i - 1][j - 1] + prices[i]);}}}int ret = 0;for(int j = 0; j < 3; j++) {ret = Math.max(ret, g[n - 1][j]);}return ret;}
}

2. Z 字形变换

原题链接
题干:
字符串 s,给定的行数 numRows
从上往下、从左到右进行 Z 字形排列
输出需要从左往右逐行读取

算法原理:
1. 模拟

2. 找规律

第一行:0 到 0+d 到 0+2d…0+kd
第 k 行:(k, d-k) 到 (k+d, d-k+d) 到 (k+2d, d-k+2d)
第 n-1 行:n-1 到 n-1+d 到 n-1+2d…n-1+kd
当 n = 1 的时候特殊处理
代码:
class Solution {public String convert(String s, int numRows) {// 处理一下边界情况if(numRows == 1) {return s;}int d = 2 * numRows - 2;int n = s.length();StringBuilder ret = new StringBuilder();//1. 处理第一行for(int i = 0; i < n; i += d) {ret.append(s.charAt(i));}//2. 处理中间行for(int k = 1; k < numRows - 1; k++) {// 依次枚举中间行for(int i = k, j = d - i; i < n || j < n; j += d, i += d) {if(i < n) {ret.append(s.charAt(i));}if(j < n) {ret.append(s.charAt(j));}}}//3. 处理最后一行for(int i = numRows - 1; i < n; i += d) {ret.append(s.charAt(i));}return ret.toString();}
}

相关文章:
【算法刷题】Day28
文章目录 1. 买卖股票的最佳时机 III题干:算法原理:1. 状态表示:2. 状态转移方程3. 初始化4. 填表顺序5. 返回值 代码: 2. Z 字形变换题干:算法原理:1. 模拟2. 找规律 代码: 1. 买卖股票的最佳时…...
深入了解pnpm:一种高效的包管理工具
✨专栏介绍 在当今数字化时代,Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序,就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术,以及各种框架、库和工具…...
QEMU源码全解析 —— PCI设备模拟(1)
接前一篇文章: 1. PCI设备简介 PCI是用来连接外设的一种局部(local)总线,其主要功能是连接外部设备。PCI总线规范在20世纪90年代提出以后,其逐渐取代了其它各种总线,被各种处理器所支持。直到现在…...
Vue-10、Vue键盘事件
1、vue中常见的按键别名 回车 ---------enter <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>键盘事件</title><!--引入vue--><script type"text/javascript" src"h…...
胡圆圆的暑期实习经验分享
背景 实验室一般是在研究生二年级的时候会放实习,在以后的日子就是自己完成毕业工作要求,基本上不再涉及实验室的活了,目前是一月份也是开始准备暑期实习的好时间。实验室每年这个时候都会有学长学姐组织暑期实习经验分享,本着不…...
基于uniapp封装的table组件
数据格式 tableData: [{elcInfo: [{tableData:[1,293021.1,293021.1,293021.1,293021.1,]}]},{elcInfo: [{tableData:[1,293021.1,293021.1,293021.1,293021.1,]}]},{elcInfo: [{tableData:[1,293021.1,293021.1,293021.1,293021.1,]}]},/* {title: "2",elcInfo: [{…...
Git删除远程仓库某次提交记录后的所有提交
1、鼠标右键->git bash here,然后cd切换到代码目录; 2、git log查看提交记录,获取commit id 3、git reset commit id(commit id指要保留的最新的提交记录id) 4、git push --force,强制push 如果出现…...
强化学习10——免模型控制Q-learning算法
Q-learning算法 主要思路 由于 V π ( s ) ∑ a ∈ A π ( a ∣ s ) Q π ( s , a ) V_\pi(s)\sum_{a\in A}\pi(a\mid s)Q_\pi(s,a) Vπ(s)∑a∈Aπ(a∣s)Qπ(s,a) ,当我们直接预测动作价值函数,在决策中选择Q值最大即动作价值最大的动作&…...
【数据库】CRUD常用函数UNION 和 UNION ALL
文章目录 一、CRUD二、函数2.1 字符函数 (Character Functions):2.2 数字函数 (Numeric Functions):2.3 日期函数 (Date Functions):2.4 流程控制函数:2.5 聚合函数: 三、UNION 和 UNION ALL3.1 UNION:3.2 UNION ALL3.3 注意事项 一、CRUD CRUD 是指数据库操作的四…...
Adding Conditional Control to Text-to-Image Diffusion Models——【论文笔记】
本文发表于ICCV2023 论文地址:ICCV 2023 Open Access Repository (thecvf.com) 官方实现代码:lllyasviel/ControlNet: Let us control diffusion models! (github.com) Abstract 论文提出了一种神经网络架构ControlNet,可以将空间条件控制添加到大型…...
Python与人工智能
Python 是一种广泛用于人工智能(AI)开发的编程语言。Python具有简洁的语法和强大的库支持,使其成为数据科学、机器学习和深度学习的理想选择。 Python中有许多库可以帮助实现人工智能,其中最流行的包括TensorFlow和PyTorch。这些…...
【Docker】Docker基础
文章目录 安装使用帮助启动命令镜像命令容器命令 安装 # 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine # 设置存储库 sudo yum install -y yum-utils …...
linux异常情况,排查处理中
登录客户环境后,发现一个奇怪情况如下图,之前也遇到过,直接fuser -ck /backup操作的话,主机将会重启,因数据库运行中,等待停机维护时间,同时也在想办法不重启的情况下解决该问题 [rootdb ~]# f…...
Spring Boot参数校验方案
NotNull:值不能为null;NotEmpty:字符串、集合或数组的值不能为空,即长度大于0;NotBlank:字符串的值不能为空白,即不能只包含空格;Size:字符串、集合或数组的大小是否在指…...
【漏洞复现】ActiveMQ反序列化漏洞(CVE-2015-5254)
Nx01 产品简介 Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件。ActiveMQ是消息队列服务,是面向消息中间件(MOM)的最终实现,它为企业消息传递提供高可用、出色性能、可扩展、稳定和安全保障。 Nx02 漏洞描述 Re…...
面试题:MySQL误删表数据,如何快速恢复丢失的数据?
相信后端研发的同学在开发过程经常会遇到产品临时修改线上数据的需求,如果手法很稳那么很庆幸可以很快完成任务,很不幸某一天突然手一抖把表里的数据修改错误或者误删了,这个时候你会发现各种问题反馈接踵而来。 如果身边有BDA或者有这方面经…...
李沐之神经网络基础
目录 1.模型构造 1.1层和块 1.2自定义块 1.3顺序块 1.4在前向传播函数中执行代码 2.参数管理 2.1参数访问 2.2参数初始化 3.自定义层 3.1不带参数的层 3.2带参数的层 4.读写文件 4.1加载和保存张量 4.2加载和保存模型参数 1.模型构造 1.1层和块 import torch fr…...
【docker】使用 Dockerfile 构建镜像
一、什么是Dockerfile Dockerfile 是用于构建 Docker 镜像的文本文件。它包含了一系列的指令,用于描述如何构建镜像的步骤和配置。 通过编写 Dockerfile,您可以定义镜像的基础环境、安装软件包、复制文件、设置环境变量等操作。Dockerfile 提供了一种可…...
计算机网络—— 概述
概述 1.1 因特网概述 网络、互联网和因特网 网络由若干结点和连接这些结点的链路组成多个网络还可以通过路由器互联起来,这样就构成了一个覆盖范围更大的网络,即互联网(或互连网)。因特网(Internet)是世…...
“超人练习法”系列06:如何更好地掌握技能?
01 掌握的阶段 关于人类学习新事物的最生动、最精妙的比喻,我是从笑来老师那里学到的。 他指出,学习新知识、新概念犹如在构建自己大脑皮层,每个习得的概念就像是大脑皮层上的一个个微小神经元。 一个看似聪明、博学的人,总能在各…...
智能家庭网络系统新选择:iStoreOS打造高效家庭网络与存储中心
智能家庭网络系统新选择:iStoreOS打造高效家庭网络与存储中心 【免费下载链接】istoreos 提供一个人人会用的的路由、NAS系统 (目前活跃的分支是 istoreos-22.03) 项目地址: https://gitcode.com/gh_mirrors/is/istoreos 家庭网络卡顿…...
DDPG与TD3算法训练中tanh饱和区导致的边界值问题分析与调优
1. 为什么DDPG/TD3会卡在动作边界值? 第一次用DDPG训练机械臂控制任务时,我盯着监控曲线看了整整三天——那个该死的关节角度永远卡在30度的极限位置。后来换成TD3算法,发现同样会陷入这个怪圈。这就像新手司机开车总把方向盘打死,…...
Z-Image-Turbo-辉夜巫女开发者案例:对接Stable Diffusion WebUI插件生态的兼容方案
Z-Image-Turbo-辉夜巫女开发者案例:对接Stable Diffusion WebUI插件生态的兼容方案 1. 引言:当定制模型遇上主流生态 如果你是一位AI绘画的开发者或爱好者,手里有一个精心调校的、专门生成“辉夜巫女”风格的文生图模型,你可能会…...
腾讯云GPU服务器上,手把手教你5分钟搞定Isaac Sim 5.0环境(附VNC黑屏自救指南)
腾讯云GPU服务器5分钟极速部署Isaac Sim 5.0全攻略 在机器人仿真与AI训练领域,NVIDIA Isaac Sim已成为行业标杆工具。但许多开发者在云端部署时,往往耗费数小时甚至数天时间卡在环境配置环节。本文将基于腾讯云GPU服务器,分享一套经过实战验证…...
如何构建可靠的HTML5解析测试框架:全面指南与最佳实践
如何构建可靠的HTML5解析测试框架:全面指南与最佳实践 【免费下载链接】gumbo-parser An HTML5 parsing library in pure C99 项目地址: https://gitcode.com/gh_mirrors/gum/gumbo-parser HTML5解析器是现代Web开发的核心组件,而构建一个可靠的测…...
告别样本不平衡噩梦:Focal Loss 让你的模型学会“划重点”
我说的不是 Python 那个 HTTPX 客户端,而是 ProjectDiscovery 出的 httpx。官方对它的定义很直接: 一个高性能、面向多探针的 HTTP 工具包支持高并发下对 URL、主机、CIDR 等 目标做 HTTP 层探测,并尽量保证结果稳定性。 它本质上不是漏洞扫描…...
5个步骤快速搭建医院信息系统:终极医疗数字化解决方案
5个步骤快速搭建医院信息系统:终极医疗数字化解决方案 【免费下载链接】HIS ZainZhao/HIS: HIS 通常代表医疗信息系统(Hospital Information System),但此链接指向的具体项目信息未知,可能是某个开发者设计或维护的医院…...
OpenClaw定时任务系统:ollama-QwQ-32B每日早报自动生成与推送
OpenClaw定时任务系统:ollama-QwQ-32B每日早报自动生成与推送 1. 为什么需要自动化晨报系统 每天早上打开电脑,我都会被各种信息轰炸——行业新闻、技术动态、待办事项、会议安排...手动整理这些内容至少需要半小时。直到我发现OpenClawollama-QwQ-32B…...
深入BRPC的MPSC队列:为什么ExecutionQueue比传统队列更适合网络编程?
深入解析BRPC的MPSC队列:ExecutionQueue如何重塑网络编程任务调度 在网络编程的世界里,任务调度效率往往成为系统性能的瓶颈。传统队列在面对高并发网络请求时,常常因为锁竞争、内存分配等问题导致吞吐量下降。BRPC框架中的ExecutionQueue以…...
炸裂实锤!随手乱按挖出编译器「乱码隐藏保留字」编译报错直接封神
文章目录封面文案一、专栏开篇回顾二、初见疑点:反复刷屏的神秘乱码片段三、三层硬核现场取证,逐层锁死真相1. IDE标识实锤:专属K图标 关键字同款高亮2. 编译现场终极定罪:报错和普通未定义变量完全不同对比区分,一眼…...
