代码随想录算法训练营第五十一天 | 买卖股票3

news/2024/12/22 21:17:21/

309.最佳买卖股票时机含冷冻期

文档讲解:代码随想录 (programmercarl.com)

视频讲解:动态规划来决定最佳时机,这次有冷冻期!| LeetCode:309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bilibili

状态:dp定义看的文档,可以根据定义写完后面的。

思路

动规五部曲

  1. 确定dp数组以及下标的含义

    dp[i][j],第i天状态为j,所剩的最多现金为dp[i][j]

    具体可以区分出如下四个状态:

    • 状态一:持有股票状态(今天买入股票,或者是之前就买入了股票然后没有操作,一直持有)
    • 不持有股票状态,这里就有两种卖出股票状态
      • 状态二:保持卖出股票的状态(两天前就卖出了股票,度过一天冷冻期)
      • 状态三:今天卖出股票
    • 状态四:今天为冷冻期状态,但冷冻期状态不可持续,只有一天!
  2. 确定递推公式(直接根据下面这张图可以退出)

    在这里插入图片描述

    代码

    class Solution {
    public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(), vector<int>(4, 0));dp[0][0] = 0 - prices[0];dp[0][1] = 0; dp[0][2] = 0; dp[0][3] = 0;for(int i = 1; i < prices.size(); i++){dp[i][0] = max(dp[i - 1][0], max(dp[i - 1][3] - prices[i], dp[i - 1][1] - prices[i]));dp[i][1] = max(dp[i - 1][1], dp[i - 1][3]);dp[i][2] = dp[i - 1][0] + prices[i];dp[i][3] = dp[i - 1][2];}return max(dp[prices.size() - 1][0],max(dp[prices.size() - 1][1],max(dp[prices.size() - 1][2], dp[prices.size() - 1][3])));}
    };
    

714.买卖股票的最佳时机含手续费

文档讲解:代码随想录 (programmercarl.com)

视频讲解:动态规划来决定最佳时机,这次含手续费!| LeetCode:714.买卖股票的最佳时机含手续费_哔哩哔哩_bilibili

状态:能直接做出来。相对于动态规划:122.买卖股票的最佳时机II (opens new window),本题只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的。

代码

class Solution {
public:int maxProfit(vector<int>& prices, int fee) {vector<vector<int>> dp(prices.size(), vector<int>(2, 0));dp[0][0] = 0 - prices[0];for(int i = 1; i < prices.size();i++){dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);}return max(dp[prices.size() - 1][0], dp[prices.size() - 1][1]);}
};

http://www.ppmy.cn/news/80720.html

相关文章

小马识途:如何做好短视频内容运营

随着移动互联网普及&#xff0c;抖音和快手小红书这样的短视频平台已经成为这个时代最流行的内容承载形式。 短视频运营成为当下网络推广的一项重要任务&#xff0c;如何优化短视频呢&#xff1f;小马识途营销顾问就自身经历分享几点建议&#xff1a; 1、灵活的选题机制 内容选…

JavaScript实现循环读入整数进行累加,直到累加的和大于1000为止的代码

以下为实现循环读入整数进行累加&#xff0c;直到累加的和大于1000为止的程序代码和运行截图 目录 前言 一、循环读入整数进行累加&#xff0c;直到累加的和大于1000为止 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0…

易观千帆 | 2023年4月证券APP月活跃用户规模盘点

易观&#xff1a;2023年4月证券服务应用活跃人数13924.88万人&#xff0c;相较上月&#xff0c;环比下降1.46%&#xff0c;同比增长3.64%&#xff1b;2023年4月自营类证券服务应用Top10 活跃人数6144.02万人&#xff0c;环比下降0.01%&#xff1b;2023年4月第三方证券服务应用T…

「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接(1)

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

Kuberntes云原生实战08 Kubesphere 通过OIDC实现gitlab联合登录(全网唯一可用)

大家好,我是飘渺。 今天咱们继续更新Kubernetes云原生实战系列,本节文章将会打通公司用户体系,使用Gitlab中的用户完成登录认证。 为什么需要集成登录认证 KubeSphere 多租户是实际生产使用中非常需要的一个功能,该功能满足不同用户登录 KubeSphere 平台的需求。比如开发…

Java修饰符

4 修饰符(static关键字) 4.1 权限修饰符 4.2 状态修饰符 final(最终态)static(静态)4.2.1 final的特点 final 关键字是最终的意思,可以修饰成员变量,成员方法,类final修饰的特点: 1.修饰方法:表示该方法是最终方法,不能被重写2.修饰变量:表示该变量是常量,不能被…

使用宝塔在Linux面板搭建网站,并实现公网远程访问「内网穿透」

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 转载自远程内网穿透的文章&#xff1a;Linux使用宝塔面板搭建网站&#xff0c;并内网穿透实现公网访问 前言 宝塔面板作为简单好用的服务器运维管理面板&#…

创客匠人CEO蒋洪波:抓住抓住市场需求发展

拍手访谈创客匠人CEO蒋洪波&#xff1a;创客匠人是如何开始的&#xff1f;未来又将如何发展&#xff1f; 一、创客匠人知识付费是如何开始的&#xff1f; 1.从爱好出发 我本人喜欢做产品&#xff0c;或者说是喜欢研究产品。 得益于在研发产品上的一些天赋&#xff0c;我们产品…