[Leetcode笔记] 动态规划相关

前言

写题目写到了一些和动态规划相关的内容,所以在这里记录一下

LCR 089

在这里插入图片描述

题解思路

总的来说,就是用一个数组去存储当前的最优解,然后从0开始一路向上顺推过去,求得最后一位的最优解。
在这里插入图片描述

class Solution {
public:int rob(vector<int>& nums) {//然后从maxElement的左右一直找最大值 if(nums.empty()) return 0;int size = nums.size();if(size == 1) return nums[0];if(size == 2) return std::max(nums[0],nums[1]);vector<int> dp = vector<int>(size,0);dp[0] = nums[0];dp[1] = std::max(nums[0],nums[1]);for(int i = 2; i < size; i++){dp[i] = std::max(dp[i-1],dp[i-2] + nums[i]);}return dp[size-1];}
};

LCR 90

在这里插入图片描述
这道题和上述的089的区别就是这个题目中是需要考虑同时拿第一家和最后一家的情况,那我们这个动态规划可以稍微修改一下,实际上我们只需要修改一下边界条件即可:

、
转移方程仍然同上,边界条件修改为:

在这里插入图片描述

那么我们改一下遍历的过程:

	//提供一个从某个开头到某个结尾求最大值的方案int robRange(vector<int>& nums, int start, int end) {int first = nums[start], second = max(nums[start], nums[start + 1]);for (int i = start + 2; i <= end; i++) {int temp = second;second = max(first + nums[i], second);first = temp;}return second;}

得到这样一个方案之后,因为我们知道在这样一个偷东西问题上,两个房子之间不可能超过两个的差距,所以我们要么会偷头,要么会偷尾,所以只需要考虑两种情况,从0 - length 或者从 1 - length-1

    int rob(vector<int>& nums) {int length = nums.size();if (length == 1) {return nums[0];} else if (length == 2) {return max(nums[0], nums[1]);}return max(robRange(nums, 0, length - 2), robRange(nums, 1, length - 1));}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql语句学习

SQL Select语句完整的执行顺序&#xff1a; 1、from子句组装来自不同数据源的数据&#xff1b; &#xff08;先join在on&#xff09; 2、where子句基于指定的条件对记录行进行筛选&#xff1b; 3、group by子句将数据划分为多个分组&#xff1b; 4、使用聚集函数进行计算&a…

Ts递归查找多个根节点树结构某一条数据

// 递归查找树结构数据 function getIsNode(nodes: any, code: string) {let found false;function search(nodes: any) {nodes.forEach((node: any) > {if (node.code code) { //code相等&#xff0c;视为找到&#xff0c;将found设置为truefound true;}// 否则查找子节…

推荐一款强大的开源自动化测试神器

搞过自动化测试的小伙伴&#xff0c;相信都知道&#xff0c;在Web自动化测试中&#xff0c;有一款自动化测试神器工具: selenium。结合标准的WebDriver API来编写Python自动化脚本&#xff0c;可以实现解放双手&#xff0c;让脚本代替人工在Web浏览器上完成指定的操作。 虽然s…

【LAMMPS学习】七、加速性能(3)通用技巧

7. 加速性能 7.1.基准测试 7.2.测试性能 7.3.通用技巧 以下是提高模拟性能的通用技巧。它们中的大多数只适用于当前性能中的某些模型和某些瓶颈&#xff0c;因此让您生成的计时数据作为指导。要预测这些选项会产生多大的差异&#xff0c;即使不是不可能&#xff0c;也是很难…

谷歌推出多模态视频模型,自动生成丰富动作视频

谷歌的研究人员推出了一款多模态扩散模型——VLOGGER。 用户只需要向VLOGGER输入图像、语音&#xff0c;就能生成带语音、丰富动作的人物视频。VLOGGER基于扩散模型开发而成&#xff0c;并提出了一种全新的架构&#xff0c;将文本生成图像模型与空间、时间控制相结合&#xff…

LangChain-04 RAG Retrieval-Augmented Generation 检索增强生成

内容简介 LangChain 中的 “RAG” 指的是 “Retrieval-Augmented Generation”&#xff0c;即检索增强生成。它是一种结合了检索&#xff08;从大量数据中检索相关信息&#xff09;和生成&#xff08;基于检索到的信息生成文本&#xff09;的技术&#xff0c;旨在改善和增强自…

TiDB单机版安装和连接访问

TiDB单机版安装和连接访问 1、下载 $wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz 2、解压缩 $tar -zxvf tidb-latest-linux-amd64.tar.gz 3、启动TiDB 启动PD $./bin/pd-server --data-dirpd --log-filepd.log 启动tikv $./bin/tikv-server --pd…

MySQL 进阶-----索引使用规则

目录 前言 一、验证索引效率 二、最左前缀法则 三、范围查询 四、索引失效情况 1.索引列运算 2.字符串不加引号 3 .模糊查询 4.or连接条件 5 .数据分布影响 前言 本期我们学习MySQL索引的使用方法&#xff0c;在讲解索引的使用原则之前&#xff0c;先通过一个简单的…

Celery的任务流

Celery的任务流 在之前调用任务的时候只是使用delay()和apply_async()方法。但是有时我们并不想简单的执行单个异步任务&#xff0c;比如说需要将某个异步任务的结果作为另一个异步任务的参数或者需要将多个异步任务并行执行&#xff0c;返回一组返回值&#xff0c;为了实现此…

ubuntu16如何使用高版本cmake

1.引言 最近在尝试ubuntu16.04下编译开源项目vsome&#xff0c;发现使用apt命令默认安装cmake的的版本太低。如下 最终得知&#xff0c;ubuntu16默认安装确实只能到3.5.1。解决办法只能是源码安装更高版本。 2.源码下载3.20 //定位到opt目录 cd /opt 下载 wget https://cmak…

C++ | Leetcode C++题解之第7题整数反转

题目&#xff1a; 题解&#xff1a; class Solution { public:int reverse(int x) {int rev 0;while (x ! 0) {if (rev < INT_MIN / 10 || rev > INT_MAX / 10) {return 0;}int digit x % 10;x / 10;rev rev * 10 digit;}return rev;} };

【Django开发】前后端分离美多商城项目第5篇:用户部分,起源【附代码文档】

美多商城项目4.0文档完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;美多商城&#xff0c;项目准备1.B2B--企业对企业,2.C2C--个人对个人,3.B2C--企业对个人,4.C2B--个人对企业,5.O2O--线上到线下,6.F2C--工厂到个人。项目准备&#xff0c;配置1. 修改set…