代码随想录训练营第54天|休息日 小结

news2024/9/20 22:31:19

打家劫舍系列

198. 打家劫舍对于当前的房间,无非就两种选择:偷与不偷。如果当前房间偷,那么前一个房间就不偷,即dp[i] = dp[i-2] + nums[i];如果当前房间不偷,那么dp[i] = dp[i-1],因此递推公式为:

dp[i] = max(dp[i-1],dp[i-2] + nums[i])

213. 打家劫舍 II这个题上上一题的基础之上加入了成环的约束条件,因为第一间房间和最后一间房间只能偷一间,因此可以分为两种情况,一种是不偷第一间房,另一种是不偷最后一间房间,这样两种情况都不同考虑成环的问题且都转化为了上一个题,因此可以用上一个题的思路求解,最终的结果是两种情况中的最大值。
337. 打家劫舍 III这题将数组变成了树,因此涉及到树的遍历方式,这里使用后序遍历。

买卖股票系列

121. 买卖股票的最佳时机这个题只能买卖一次,因此只能在最低点买入,在最低点后的最高点卖出,定义dp数组dp[i][0]和dp[i][1],递推公式如下:

dp[i][0] = min(prices[i],dp[i-1][0]);				//买入时花费的最少现金
dp[i][1] = max(dp[i-1][1],prices[i]-dp[i][0]);		//卖出时所得的最大利润

122. 买卖股票的最佳时机 II这个题可以多次买卖,因此在买入的时候还要考虑在此之前花费的现金,递推公式如下,注意和上一个题递推公式的差别:

dp[i][0] = min(prices[i] - dp[i-1][1],dp[i-1][0]);  	//买入时花费的最少现金
dp[i][1] = max(dp[i-1][1],prices[i]-dp[i][0]);			//卖出时所得的最大利润

123. 买卖股票的最佳时机 III和188. 买卖股票的最佳时机 IV求解思路是一样的,在只允许买卖两次的时候就可以发现规律,无非就是要列出每天的所有可能状态。买卖k次时的代码实现如下:

class Solution {
public:
    int maxProfit(int k, vector<int>& prices) {
        vector<vector<int>> dp(prices.size(),vector<int>(2 * k + 1));
        //初始化dp数组
        for(int j = 1 ; j < 2 * k + 1; j += 2) //注意这里是j += 2
            dp[0][j] = -prices[0];  //买入状态初始化,卖出状态已经初始化为0
        //遍历
        for(int i = 1; i < dp.size(); i++){
            //dp[i][0] = dp[i-1][0];  //始终保持不变,可以不用
            for(int j = 1; j < 2 * k + 1; j += 2){      //注意这里是j += 2
                dp[i][j] = max(dp[i-1][j],dp[i-1][j-1] - prices[i]);    //买入
                dp[i][j+1] = max(dp[i-1][j+1],dp[i-1][j] + prices[i]);  //卖出
            }
        }
        return dp.back()[2*k];
    }
};

当j为奇数的时候表示买入,当j为偶数的时候表示卖出。

309. 最佳买卖股票时机含冷冻期这个题在前四个题的基础上加入了冷冻期,在求解过程中要理清楚状态转移过程,在这个题中定义下面的四个状态:

  • 状态一( j = 0):买入状态,不一定当天买入,也可能是之前就已经买入了
  • 状态二( j = 1):卖出状态且已经度过了冷冻期
  • 状态三( j = 2):今天卖出,还未度过冷冻期
  • 状态四(j = 3):冷冻期

根据状态转移关系即可得到递推公式:

dp[i][0] = max(dp[i-1][0],max(dp[i-1][1] - prices[i],dp[i-1][3] - 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];

714. 买卖股票的最佳时机含手续费这个题在122. 买卖股票的最佳时机 II的基础上加入了手续费,因此在卖出的时候考虑手续费即可。

子序列问题

子序列问题一定要清楚dp[i]的定义,以及子序列连续和不连续的求解区别。

300. 最长递增子序列中dp[i]定义为以nums[i]作为子序列的最后一个元素的最长子序列为dp[i],因此最终的结果是dp数组中的最大值。核心代码如下:

for(int i = 1; i < nums.size(); i++){
    for(int j = 0; j < i; j++){
        if(nums[i] > nums[j]) dp[i] = max(dp[i],dp[j]+1);
    }
    if(dp[i] > result)  result = dp[i];
}

674. 最长连续递增序列这个题要求子序列是连续的,因此dp[i]只能和dp[i-1]有关系,递推公式为:

if(nums[i] > nums[i-1]) dp[i] = dp[i-1] + 1;

如果不满足nums[i] > nums[i-1],则dp[i]保持1不变(初始化的时候已经赋值为1),因此一个元素就可以构成一个子序列。

718. 最长重复子数组这个题涉及到两个数组,因此要使用二维dp数组,且dp[i][j]只能由dp[i-1][j-]1得到。如下图所示:
在这里插入图片描述
1143. 最长公共子序列和718. 最长重复子数组的区别在于这题的子序列不连续,差异主要体现在初始化和递推公式上,本题的递推公式为:

if(text1[i] == text2[j])
    dp[i][j] = dp[i-1][j-1] + 1;
else
    dp[i][j] = max(dp[i-1][j],dp[i][j-1]);

dp[i][j]不仅和dp[i-1][j-1]有关,还和dp[i-1][j]、dp[i][j-1]有关。

1035. 不相交的线和1143. 最长公共子序列完全一样,关键是要想明白怎么个一样法!

53. 最大子序和这个题其实就是求的是局部的最大和,dp数组中保存的是局部最大和,最终的结果是dp数组中的最大值,递推公式如下:

dp[i] = max(dp[i-1] + nums[i],nums[i]);

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

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

相关文章

ch3_1_多进程的概念

1. CPU 的管理 CPU的工作原理&#xff1a; 从内存中取出程序的指令&#xff0c; 执行程序中的指令&#xff1b; 1.1 多道程序 假设A 程序运行时&#xff0c; 遇到 IO 处理时&#xff0c; 为了能够执行A 程序的后续指令&#xff0c; 正常情况下 cpu 需要等待着IO 处理完成&am…

后端快速学习VUE(一):VUE入门

个人博客地址 http://xiaohe-blog.top/ 文章目录1. 简介2. 基本使用2.1 引入Vue2.2 基本使用2.3 总结 &#xff1a;3. v-text、v-html指令的使用4. v-on : 事件绑定4.1 事件的三要素&#xff1a;4.2 v-on的基本使用4.3 v-on获取vue实例this4.4 事件绑定简化写法5. 常用指令5.1 …

useRef 源码解读

文章目录useRef 源码解读mountRefupdateRefref 的生命周期&#xff08;工作流程&#xff09;总结&#xff1a;render 阶段commit 阶段总述具体阐述safelyDetachRefcommitAttachRefuseRef 源码解读 由于 string 类型的 ref 已不推荐使用&#xff0c;所以只针对 function &#…

论文复现-1:bertscore

Bertscore是计算相似度的一种方法。 遗留问题&#xff1a;使用model layer 中的单一层 还是多个层&#xff0c;会对结果造成很大的影响吗&#xff1f; sent_encode函数是使用tokenizer将句子做encode。 tokenizer.encode( sent, add_special_tokensTrue, add_prefix_spaceTrue,…

HTML与CSS基础

2022.12.12 程序员在前端写完代码之后通过浏览器的渲染和解析成为用户看到的网页 浏览器出品的公司不同&#xff0c;内部的渲染引擎也不同。导致解析相同代码时的速度、性能、效果也不同 相同的前端网页在不同浏览器中运行的的结果也可能不同 WEB的三大标准 HTML包含页面内…

Java+MySQL基于SSM的智能办公管理系统

随着时代的发展,人们越来越来希望通过简单方便快捷的方式来进行办公,通过自能办公系统可以实现在线办公,这种办公模式脱离了传统纸质办公很多困扰,在实现现代化的同时提高了办公的效率。 本智能办公管理系统采用JAVA语言来进行开发,用小巧灵活的MySQL数据库做完后台存储解释。本…

痞子衡职场经验与感悟分享 - 索引

大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。本系列痞子衡给大家分享的是职场经验与见闻感悟。 痞子衡在嵌入式行业也摸打滚爬了不少年&#xff0c;有一些个人经验可以给大家参考。所谓他山之石可以攻玉&#xff0c;希望痞子衡的经验对大家的职场之路有所帮…

jsp+ssm计算机毕业设计电影影评网【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

java基础的综合运用

文章目录前言一.类的设计书籍类书架类用户类二.行为的规范2.1 增加书籍2.2展示所有书籍2.3查找书籍2.4 删除书籍2.5 归还书籍2.6 借阅书籍2.7 退出系统三.测试类的方法四.项目的目录前言 在我们学习完面向对象的知识之后&#xff0c;我们就要运用相关知识去实现一个图书管理系…

十六进制转Ascii脚本(包含\x处理)

目录 1.前言 2.十六进制转换脚本(包含处理\x) 1.前言 在以前玩CTF的时候,会遇到十六进制编码,特别是带\x的那种,网上虽然也有在线解密网站,但是对于\x解码不是特别友好。 2.十六进制转换脚本(包含处理\x&#

【Flink实时数仓】数据仓库项目实战 《四》日志数据分流 【DWD】

文章目录【Flink实时数仓】数据仓库项目实战 《四》日志数据分流-流量域 【DWD】1.流量域未经加工的事务事实表1.1主要任务1.1.1数据清洗&#xff08;ETL&#xff09;1.1.2新老访客状态标记修复1.1.3新老访客状态标记修复1.2图解1.3代码1.4数据测试1.4.1 测试脏数据1.4.2 测试e…

论文写作神器,SCI 写作必备

一、论文写作建议与英文句型积累/引用 1. Academic Phrasebank 网址&#xff1a; https://www.phrasebank.manchester.ac.uk/ Academic Phrasebank&#xff1a;从引言工作到结论提出了论文写作的详细建议&#xff0c;并在每个小点给出了海量的英语表达以供参考。是 SCI 新手…

linux red hat 8.0 搭建DNS服务

DNS简介&#xff1a; 简单的来说&#xff0c;DNS就是把域名和IP地址联系在一起的服务&#xff0c;有了DNS服务器&#xff0c;你就不用输入IP地址来访问一个网站&#xff0c;可以通过输入网址访问。 可以把DNS服务理解成网易有道词典&#xff0c;你去搜索一个英语单词&#xff0…

【MindStudio训练营第一期】【昇腾AI训练营新手班学习笔记】大作业

介绍 大作业&#xff1a;使用MindStudio成功复现昇腾社区中的MindX SDK应用案例 选题&#xff1a;黑白图像上色 https://www.hiascend.com/zh/developer/mindx-sdk/case-studies/d0c56d6f-a6f9-4b77-8587-db8272f22f3b 步骤 运行 使用MindStudio打开下载到的工程文件 创建d…

jsp+ssm计算机毕业设计大学新生军训管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

笔试强训(四十八)

目录一、选择题二、编程题2.1 左右最值最大差2.1.1 题目2.1.2 题解一、选择题 &#xff08;1&#xff09;常见的http错误描述原因错误的是&#xff08;D&#xff09; A.404-Not found B.302-临时重定向 C.500-内部服务错误 D.403-IP address rejected 403 Forbidden&#xff1…

Unity Animancer插件(三)运动

一、根运动 Animancer的根运动系统与原生的工作原理完全相同&#xff0c;但我们可以通过继承Transition类型或实现ITransition接口&#xff0c;来将额外的数据与动画绑定&#xff0c;从而更方便地控制根运动。 在下面这个示例中&#xff0c;我们通过自定义的Transition类实现…

jsp+ssm计算机毕业设计订单管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

Linux操作系统~信号处理的底层原理

目录 1.信号在内核中的表示 信号处理的方法 2.信号的递达&#xff0c;未决&#xff0c;阻塞 3.信号集操作函数 &#xff08;1&#xff09;.sigset_t&#xff08;信号集类型&#xff09; &#xff08;2&#xff09;.信号集函数 &#xff08;3&#xff09;.sigprocmask函数…

基于asp.net194校园火车票预订系统-计算机毕业设计

项目介绍 asp.net版火车票查询系统主要有用户注册&#xff0c;在线查询&#xff0c;在线订票&#xff0c;后台管理等功能。用户只有先注册才能登录火车票查询系统的首界面&#xff0c;然后可以进行在线查询、车票订购的功能。可对车次信息的查询和客户对已定车票信息的查询&am…