代码随想录打卡第51天|309.最佳买卖股票时机含冷冻期;714.买卖股票的最佳时机含手续费
309.最佳买卖股票时机含冷冻期
关键点1:dp数组的含义
1-1:dp[i][0] 第i天持有股票的最大金钱
1-2:dp[i][1] 第i天卖出股票的最大金钱
1-3:dp[i][2] 第i天处于冷冻期的最大金钱
1-4:dp[i][3] 第i天保持卖出股票的最大金钱
关键点2:递归公式的推导
2-1:dp[i][0] = Math.max(dp[i-1][0],Math.max(dp[i-1][3]-prices[i],dp[i-1][2] - prices[i])); 第i天持有股票的最大金钱 = max( 第i-1天持有股票的最大金钱,第i-1天保持卖出股票的最大金钱-买入股票的金钱 ,前一天是冷冻期-买入股票的金钱)
2-2:dp[i][1] = dp[i-1][0]+prices[i]; 第i天卖出股票的最大金钱 = 第i-1天持有股票的最大金钱+卖出股票的金钱
2-3: dp[i][2] = dp[i-1][1]; 第i天处于冷冻期的最大金钱 = 第i-1天处于卖出的最大金钱
2-4: dp[i][3] = Math.max(dp[i-1][3],dp[i-1][2]); 第i天保持卖出股票的最大金钱 = max( 第i-1天保持卖出股票的最大金钱,第i-1天处于冷冻期的最大金钱)
关键点3:dp数组初始化
dp[0][0] = - prices[0] ,dp[0][1] =0, dp[0][2] = 0, dp[0][3] = 0;
关键点4:遍历顺序
由于下一个dp值与上一个dp值有关,因此for循环从前往后遍历(0已经初始化了,从1开始遍历)
class Solution {public int maxProfit(int[] prices) {// dp[i][0] 第i天持有股票的最大金钱// dp[i][1] 第i天卖出股票的最大金钱// dp[i][2] 第i天处于冷冻期的最大金钱// dp[i][3] 第i天保持卖出股票的最大金钱 int[][] dp = new int[prices.length][4];dp[0][0] = -prices[0];;dp[0][1] = 0;dp[0][2] = 0;dp[0][3] = 0;for(int i = 1;i < prices.length;i++){// 第i-1天持有股票的最大金钱,第i-1天保持卖出股票的最大金钱-买入股票的金钱 ,前一天是冷冻期dp[i][0] = Math.max(dp[i-1][0],Math.max(dp[i-1][3]-prices[i],dp[i-1][2] - prices[i]));// 第i-1天持有股票的最大金钱+卖出股票的金钱 dp[i][1] = dp[i-1][0]+prices[i]; // 第i-1天处于卖出的最大金钱 dp[i][2] = dp[i-1][1]; // 第i-1保持卖出股票的最大金钱,第i-1天处于冷冻期的最大金钱dp[i][3] = Math.max(dp[i-1][3],dp[i-1][2]); }return Math.max(dp[prices.length-1][1], Math.max(dp[prices.length-1][2], dp[prices.length-1][3])); }
}
714.买卖股票的最佳时机含手续费
关键点1:dp数组的含义
1-1:dp[i][0] 第i天不持有股票的最大金钱
1-2:dp[i][1] 第i天持有股票的最大金钱
关键点2:递归公式的推导
2-1: dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1]+prices[i]-fee); 第i天不持有股票的最大金钱 = max(第i-1天不持有股票的最大金钱,第i-1天持有股票+第i天卖出股票的最大金钱-手续费)
2-2:dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]-prices[i]); 第i天持有股票的最大金钱 = max(第i-1天持有股票的最大金钱,第i-1天不持有股票-第i天买入股票的最大金钱)
关键点3:dp数组初始化
dp[0][0] = 0,dp[0][1] = - prices[0]
关键点4:遍历顺序
由于下一个dp值与上一个dp值有关,因此for循环从前往后遍历(0已经初始化了,从1开始遍历)
class Solution {public int maxProfit(int[] prices, int fee) {// dp[i][0] 第i天不持有股票的最大金钱 // dp[i][1] 第i天持有股票的最大金钱 int[][] dp = new int[prices.length][2];dp[0][0] = 0;dp[0][1] = -prices[0];for(int i = 1;i < prices.length;i++){// 第i天不持有股票的最大金钱 = max(第i-1天不持有股票的最大金钱,第i-1天持有股票+第i天卖出股票的最大金钱-手续费)dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1]+prices[i]-fee);// 第i天持有股票的最大金钱 = max(第i-1天持有股票的最大金钱,第i-1天不持有股票-第i天买入股票的最大金钱)dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]-prices[i]); }return dp[prices.length-1][0];}
}
相关文章:
代码随想录打卡第51天|309.最佳买卖股票时机含冷冻期;714.买卖股票的最佳时机含手续费
309.最佳买卖股票时机含冷冻期 关键点1:dp数组的含义 1-1:dp[i][0] 第i天持有股票的最大金钱 1-2:dp[i][1] 第i天卖出股票的最大金钱 1-3:dp[i][2] 第i天处于冷冻期的最大金钱 1-4:dp[i][3] 第i天保持卖出股票的最大金…...
Spark Shuffle介绍
文章目录1. 简介2. Hash Shuffle和Sort Shuffle2.1 Hash Shuffle2.1.1 未经优化的hashShuffleManager2.1.2 经优化的hashShuffleManager2.1.3 优化前后磁盘文件数对比2.2 Srot Shuffle Manager3. Shuffle配置选项1. 简介 Spark在DAG调度阶段会将一个Job划分为多个Stage&#x…...
【数据库原理 • 三】关系数据库标准语言SQL
前言 数据库技术是计算机科学技术中发展最快,应用最广的技术之一,它是专门研究如何科学的组织和存储数据,如何高效地获取和处理数据的技术。它已成为各行各业存储数据、管理信息、共享资源和决策支持的最先进,最常用的技术。 当前…...
ThreeJS-战争导弹飞行演示(三十四)
关键代码: function animate() { requestAnimationFrame(animate); // 使用渲染器渲染相机看这个场景的内容渲染出来 renderer.render(scene, camera); // controls.update(); // 获取delay时间 const delay clock.getDelta(); // 获取总共耗时 const time clock.…...
代码随想录_226翻转二叉树、101对称二叉树
leetcode 226. 翻转二叉树 226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]示例 2: 输入:r…...
Docker 容器日志查看
1、容器日志查看命令 Usage: docker logs [OPTIONS] CONTAINERFetch the logs of a containerOptions:--details Show extra details provided to logs-f, --follow Follow log output--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z…...
【Maven】1—Maven概述下载配置
⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 如果文章对你有所帮助,可以点赞👍…...
【Spark】RDD缓存机制
1. RDD缓存机制是什么? 把RDD的数据缓存起来,其他job可以从缓存中获取RDD数据而无需重复加工。 2. 如何对RDD进行缓存? 有两种方式,分别调用RDD的两个方法:persist 或 cache。 注意:调用这两个方法后并不…...
学成在线:第六天(p94-p102)
1、面试:为什么要用 Freemarker 静态化?如何做的? 页面静态化是指使用模板引擎技术将一个动态网页生成 html 静态页面。 满足下边的条件可以考虑使用静态化: 1、该页面被访问频率高,比如:商品信息展示、专家介绍页面等…...
读懂AUTOSAR:PduR模块--使用FIFO
简介: 现在的汽车越来越智能化和复杂化,这得益于汽车软件和电子控制系统的发展。为了帮助汽车制造商和供应商更好地开发和管理汽车软件,全球性的汽车软件开发标准——AUTOSAR(AUTomotive Open System ARchitecture)应…...
对象的比较(数据结构系列12)
目录 前言: 1.PriorityQueue 1.1PriorityQueue的特性 1.2PriorityQueue的构造器 1.3大根堆的创建 1.4PriorityQueue中函数的说明 2.java中对象的比较 2.1基本类型的比较 2.2对象的比较 2.2.1覆写基类的equals 2.2.2基于Comparable接口类的比较 2.2.3基于…...
31.下一个排列
1. 题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地&…...
ToBeWritten之理解嵌入式Web HTTP协议
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…...
顶级程序员的成长之路1
本文关注的问题是程序员的水平究竟应该按照什么样的不同层级而逐渐提高?或者说,在学习编程的过程中,每一个阶段究竟应当设定什么样的目标才比较合理?本文的内容主要借鉴了周伟明先生的专栏文章《程序员的十层楼》[86]。注意本文讨…...
第三代api自动化测试框架使用教程(pytest+allure+sql+yaml)
使用教程一、配置1、环境配置2、框架配置3、启动入口二、用例编写1、用例模板2、参数依赖写法2、函数(方法插件)写法3、接口上传文件和表单参数4、接口上传json参数5、接口无数据填写6、code断言7、body断言7、json断言8、sql断言9、完整断言写法&#x…...
Qt——实现一个获取本机网络信息的界面
效果展现 代码实现 networkinformation.h: #ifndef NETWORKINFORMATION_H #define NETWORKINFORMATION_H#include <QMainWindow> #include <QLabel> #include <QLineEdit> #include <QPushButton>class NetworkInformation : public QMai…...
全面深入了解接口自动化,看完还不会我报地址
一、自动化分类 (1)接口自动化 python/javarequestsunittest框架来实现 python/javaRF(RobotFramework)框架来实现——对于编程要求不高 (2)Web UI功能自动化 python/javaseleniumunittestddtPO框架来实…...
Python 小型项目大全 61~65
六十一、ROT13 密码 原文:http://inventwithpython.com/bigbookpython/project61.html ROT13 密码是最简单的加密算法之一,代表“旋转 13 个空格”密码将字母A到Z表示为数字 0 到 25,加密后的字母距离明文字母 13 个空格: A变成N&…...
Hlog
Hlog 简介 Hlog是Hbase实现WAL(Write ahead log )方式产生的日志信息 , 内部是一个简单的顺序日志。每个RegionServer对应1个Hlog(备注:1.X版本的可以开启MultiWAL功能,允许对应多个Hlog),所有对于该RegionServer的写入都会被记录到Hlog中。H…...
学编程应该选择什么操作系统?
今天来聊一个老生常谈的问题,学编程时到底选择什么操作系统?Mac、Windows,还是别的什么。。 作为一个每种操作系统都用过很多年的程序员,我会结合我自己的经历来给大家一些参考和建议。 接下来先分别聊聊每种操作系统的优点和不…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
