代码随想录第二十三天|动态规划(7)

news2024/9/24 19:15:29

目录

LeetCode 188. 买卖股票的最佳时机 IV

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

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

总结


LeetCode 188. 买卖股票的最佳时机 IV

题目链接:LeetCode 188. 买卖股票的最佳时机 IV

思想:本题跟之前的买卖股票的最佳时机 III 特别像,本题是把两次交易改为可以有k次交易。那么本题的状态就有2*k+1种,其中一种是什么动作都不采取,剩余2k个状态分别是第i次持有股票,第i次不持有股票。关于dp数组的五部曲都是跟III特别像,dp数组,dp[i][j]就是第i天的第j种状态下的最大利润。初始化就是把所有初次持有股票的状态最大利润初始化为-prices[0]。而持有股票的递推公式就是dp[i][j] = max(dp[i-1][j], dp[i][j-1] - prices[i]),不持有股票的递推公式是dp[i][j] = max(dp[i-1][j], dp[i][j-1] + prices[i])。

代码如下:

    int maxProfit(int k, vector<int>& prices) {
        vector<vector<int>> dp(prices.size(), vector<int>(2 * k + 1, 0));
        for (int i = 1; i < 2 * k; i += 2) {
            dp[0][i] = -prices[0];
        }
        for (int i = 1; i < prices.size(); i++) {
            for (int j = 0; j < 2 * k - 1; j+=2) {
                dp[i][j+1] = max(dp[i-1][j+1], dp[i][j] - prices[i]);
                dp[i][j+2] = max(dp[i-1][j+2], dp[i][j+1] + prices[i]);
            }
        }
        return dp[prices.size()-1][2*k];
    }

时间复杂度:O(n^2),空间复杂度:O(n^2)。

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

题目链接:LeetCode 309. 买卖股票的最佳时机含冷冻期

思想:我感觉本题比上一题还要难一点,结果这题标的难度是中等,上一题是困难,没有办法理解。而难就难在讨论递推公式,因为又加了一个规定,买卖股票后的一天无法做任何操作。

这里的状态我本来也是列的三个,结果一看题解是四个,也是跟着大佬的思路来了。

「今天卖出股票」我是没有单独列出一个状态的归类为「不持有股票的状态」,而本题为什么要单独列出「今天卖出股票」 一个状态呢?

因为本题我们有冷冻期,而冷冻期的前一天,只能是 「今天卖出股票」状态,如果是 「不持有股票状态」那么就很模糊,因为不一定是 卖出股票的操作。

那么本题最重要的就是确定递推公式了,要确定每个状态的递推公式。

第一个就是买入状态也就是持有股票状态,首先就是前几天已经买了股票,没有卖出,也就是dp[i][0] = dp[i-1][0]。其次就是今天买入了,有两种情况,前一天是冷冻期买入,前一天未持有股票买入,也就是dp[i][0] = dp[i-1][3] - prices[i] 或 dp[i-1][1] - prices[i]。这三个取最大就行了。

第二个就是卖出状态也就是不持有股票状态,首先就是前几天就不持有股票,没有买入,也就是dp[i][1] = dp[i-1][1]。其次就是今天卖出了股票,即dp[i][1] = dp[i-1][0] + prices[i]。这俩取最大了。

第三个就是今日卖出股票,很简单,dp[i][2] = dp[i-1][0] + prices[i]。

第四个就是冷冻期,也很简单,dp[i][3] = dp[i-1][2]。

其他的所有东西跟之前做过的基本上都一样。

代码如下:

    int maxProfit(vector<int>& prices) {
        if (prices.size() == 0) return 0;
        vector<vector<int>> dp(prices.size(), vector<int> (4, 0));
        dp[0][0] = -prices[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][3], max(dp[prices.size()-1][1],dp[prices.size()-1][2]));
    }

时间复杂度:O(n),空间复杂度:O(n^2)。

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

题目链接:LeetCode 714. 买卖股票的最佳时机含手续费

思想:本题其实特别简单,只要在持有递推公式的基础上,加一个-fee就行了。

代码如下:

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

时间复杂度:O(n),空间复杂度:O(n^2)。

总结

这么几天练下来,还是没啥感觉,动归还是太难了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1993255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kevin De Rug VoxEdit 竞赛来了!

让 Kevin de Rug 再现&#xff0c;去世界的某个地方冒险。 让你的创造力更上一层楼。以 Pixelmon 的 Kevin de Rug 为主题&#xff0c;在这场精彩的 VoxEdit 竞赛中释放你惊人的体素技能。 主题&#xff1a;让 Kevin de Rug 再现&#xff0c;去世界的某个地方冒险。 Kevin 被…

Linux系统驱动(十一)GPIO子系统

文章目录 一、GPIO子系统&#xff08;一&#xff09;框架结构&#xff08;二&#xff09;GPIO子系统的API&#xff08;三&#xff09;gpio子系统控制LED灯的设备树1. 画出硬件连接图2. 找出控制器的设备树3. 参考内核帮助文档 二、使用GPIO子系统实现流水灯1. 设备树文件&#…

Win11解压文件Cpu占用率过高?解决方法在此!

在Win11电脑操作中&#xff0c;用户遇到解压文件时CPU占有率过高的问题&#xff0c;不知道要如何操作才能解决该问题&#xff1f;接下来系统之家小编给大家分享几种不同的解决方法&#xff0c;帮助大家轻松解决问题&#xff0c;降低Win11电脑CPU占有率&#xff0c;提升Win11电脑…

记一次框架升级

背景 随着公司业务的不断扩展&#xff0c;新技术的更新换代&#xff0c;企业内部免不了会对软硬件进行升级&#xff0c;淘汰老旧的组件和实现方案&#xff0c;更新一波技术栈。这不&#xff0c;最近我们公司就面临这么一个难题&#xff1a;旧版本的组件上发现漏洞&#xff0c;为…

Fiddler代理后浏览器无法上网啥情况

当使用Fiddler作为代理服务器后&#xff0c;浏览器无法上网的情况通常是由以下几个原因造成的&#xff1a; 代理服务器配置不正确&#xff1a; 确保在浏览器或其他客户端中正确配置了Fiddler作为代理服务器。代理服务器地址应为运行Fiddler的计算机的局域网IP地址&#xff0c;端…

【Canvas与艺术】黄色立体感放射光芒五角星

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>黄色立体感放射光芒五角星</title><style type"text/c…

黄金走势分析及经济前景展望

黄金市场动态 近期&#xff0c;全球经济不确定性加剧&#xff0c;使得黄金市场备受关注。美国国债收益率的上涨进一步支撑了美元&#xff0c;推动黄金价格进入高位震荡阶段。尽管黄金在短期内受到波动的影响&#xff0c;但长期避险资产的吸引力仍不容忽视。 经济数据与黄金走势…

Spring---AOP(面向切面编程)

AOP(Aspect-Oriented Programming: 面向切面编程)&#xff1a;将那些与业务无关&#xff0c;却为业务模块所共调用的逻辑&#xff08;例如事务处理、日志管理、权限控制等&#xff09;封装抽取成一个可重用的模块&#xff0c;这个模块被命名为“切面”&#xff08;Aspect&#…

Promethues Metrics

Metrics Metrics可分为三部分&#xff1a; HELP 描述metric作用TYPE metric类别 TYEP Counter 某个事件发生的次数数字只能增长 Total reuqests Total ExceptionsGauge 描述当前值可以上升或下降 CurrentCPU Utilization Available System Memory Number of concurren…

萌新的Java入门日记19

Vue真恶心&#xff01;&#xff01;&#xff01;呜呜呜 5.配置代理 为了避免因后端服务器迁移造成的麻烦&#xff0c;在 vite.config.js 文件中配置如下代码&#xff1a; export default defineConfig({plugins: [vue()],server:{// 配置vite冷启动项目自动使用浏览器访问首页…

【中项】系统集成项目管理工程师-第10章 项目整合管理-10.6实施整体变更控制

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

4个免费好用的免扣素材神器!png素材根本用不完!

你是否曾为找不到合适的PPT素材而头疼&#xff1f;模糊的图片、带水印的模板&#xff0c;还有那些让人抓狂的素材搜索难题。别急&#xff0c;今天就来给大家安利四款我私藏的PPT素材神器&#xff0c;让你的PPT设计从此变得简单又高效&#xff01; 一、千鹿设计助手 — AI免抠图…

算法力扣刷题记录 七十【70. 爬楼梯及算法性能分析:时间复杂度和空间复杂度】

前言 动态规划章节第二篇。记录 七十【70. 爬楼梯】 一、题目阅读 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xf…

SQL注入sqli-labs-master关卡三

第三关如下&#xff1a; 查看该关卡的代码发现其与关卡一和关卡二的不同之处在于id($id)这里。 那么我们输入?id1或?id2)--都能用来判断是字符型还是数字型注入。 接着输入?id1) order by 3--检查它的列数。检查到4报错&#xff0c;说明只有三列。 输入?id-1) union select…

02_快速启动 Demo 创建 Electron 项目、electron-forge 搭建一个 electron 项目、手动创建electron项目

快速启动 Demo 创建 Electron 项目 一、克隆一个仓库、快速启动一个项目二、electron-forge 搭建一个 electron 项目三、手动搭建一个 electron 项目四、开发工具中配置 Eslint 一、克隆一个仓库、快速启动一个项目 要使用 git 的话首先电脑上面需要安装 git //克隆示例项目的…

Cpp中的this指针--复习记录

1.什么是this指针? 每个类都有一个this指针&#xff0c;我们的非静态成员函数可以通过这个this指针来操作对象的成员属性。this指针存储的就是类的实例的地址&#xff0c;this指针时时刻刻指向的都是这个实例对象本身。 由下图可知: 我在主函数中栈上创建了一个类的实例(由操…

数据规模介绍

batch_size 2 1829*2 3658张图片 FSC147数据集介绍 train 3659 val 1286 test 1190

xxl-job 源码梳理(2)-服务端

目录 1. 控制面的接口2.手动触发任务2. 定时任务的实现 1. 控制面的接口 服务端包含xxl-job的管理端&#xff0c;页面上的接口后端一系列的controller接口 appName是一个核心概念&#xff0c;它是指执行器应用的名称&#xff0c;appName是执行器的唯一标识 页面上的接口&#…

出行365:依托分布式数据库,让出行无忧 | OceanBase案例

*本文首发自“新华社环球”杂志&#xff0c;作者张海鑫 每年的暑期旅游旺季&#xff0c;都会触发一轮轮的文旅消费的热潮&#xff0c;对于互联网出行服务行业而言&#xff0c;这既是一场盛大的狂欢&#xff0c;也是对其综合实力的严峻考验。 然而&#xff0c;自去年暑假起&…

Email发送接口安全性保障策略?如何优化?

Email发送接口的高级功能&#xff1f;怎么有效利用邮件API接口&#xff1f; Email发送接口的安全性对于防止数据泄露、滥发垃圾邮件和恶意攻击至关重要。AokSend将探讨Email发送接口的安全性保障策略&#xff0c;帮助开发者和企业确保其电子邮件通信的安全性和可靠性。 Email…