按摩师 | 打家劫舍 | 删除并获得点数 | 动态规划

1.按摩师(打家劫舍 I)

题目连接:面试题 17.16. 按摩师
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。
注意:本题相对原题稍作改动

1.1.题目解析

在这里插入图片描述
按摩师可以任意选择预约接还是不接,说明不一定能是从第一个开始。在每次预约服务之间要有休息时间,只要是不相邻即可!那有两个问题,从那个地方开始接?服务完之后,一次跳过多少个预约?

1.2.解决问题

(1)、状态表示
假设以某个位置未结尾或者某个位置未起始 ,定义一个dp[i]就可以表示找到最优的预约集合。这里定义状态表示,以第i个位置为结尾,表示此时,dp[i]表示了预约时间最长!
但是这里有一个问题,第i个位置选还是不选的问题。假设nums = [1 2],如果i为2,这个位置选还是不选?这里的问题在于不能相邻,那要看第1个位置!所以划分两种情况:
g[i]表示,此时第i个位置必选,此时为最长预约时间
f [i]表示,此时第i个位置不选,此时为最长预约时间

(2)、状态转移⽅程
在这里插入图片描述
(3)、初始化
g[0] = nums[0],f[0] = 0
(4)、初始化顺序
这里根据题目要求,根据状态转移方程,从左往右,将两个dp填充。
(5)、返回值
返回max(f[i],g[i]),即为结果

1.3.参考代码

C++版本:

class Solution {
public:int massage(vector<int>& nums) {if(nums.empty()) return 0;int n = nums.size();vector<int> f(n);vector<int> g(n);f[0] = nums[0];for(int i = 1;i<n;i++){f[i] = g[i -1] + nums[i];g[i] = max(g[i -1],f[i -1]);}return max(f[n -1],g[n -1]);}
};

Java版本:

class Solution {public int massage(int[] nums) {int n = nums.length;if(n == 0) return 0;int g[] = new int[n];int f[] = new int[n];g[0] = nums[0];for(int i = 1;i < n;i++){g[i] = f[i -1] + nums[i];f[i] = Math.max(f[i -1],g[i -1]); }return Math.max(f[n-1],g[n-1]);}
}

2.打家劫舍 II

题目链接:213. 打家劫舍 II
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。
给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。

2.1.解决问题在这里插入图片描述

这个的问题和上一题唯一不同的点在于,第一个房子的处理。**情况一:**如果第一个房屋选,第一个房屋的值加上,从第三个房屋开始,到倒数第二个房屋的最大值。**情况二:**如果第一个房屋不选,那么从第二个房屋,到最后一个房屋,退化第一题的解决方案。

2.2.参考代码

C++版本:

class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();return max(nums[0] + rob_(nums,2,n-1),rob_(nums,1,n));}int rob_(vector<int>& nums,int start,int end){if(start >= end) return 0;int n = end - start;vector<int> g(n);vector<int> f(n);f[0] = nums[start];for(int i = 1;i <n;i++){f[i] = g[i -1] + nums[i + start];g[i] = max(f[i -1],g[i -1]);}return max(f[n-1],g[n-1]);}
};

Java版本:

class Solution {public int rob(int[] nums) {int n = nums.length;return Math.max(nums[0] + rob_(nums,2,n -1),rob_(nums,1,n));}public int rob_(int[] nums,int start,int end){if(end - start <= 0) return 0;int n = end - start;int f[] = new int[n];int g[] = new int[n];f[0] = nums[start];for(int i = 1;i < n;i++){f[i] = g[i -1] + nums[start + i];g[i] = Math.max(f[i -1],g[i - 1]);} return Math.max(f[n -1],g[n -1]);}
}

3.删除并获得点数

题目链接:740. 删除并获得点数
给你一个整数数组 nums ,你可以对它进行一些操作。
每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。
开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数

3.1.解决问题

能不能不删除?当然可以如果在多一步删除操作,岂不是多做无用功。另外,nums数组是无序的,也麻烦,不管三七二十一排序!可以将nums做预处理,映射到一个arr中。
在这里插入图片描述
最后映射成arr之后,就又变成的了。对arr数组的i位置的选还是不选,又变成了打家劫舍的问题。

3.2.参考代码

C++版本:

class Solution {
public:int deleteAndEarn(vector<int>& nums) {const int N = 10001;vector<int> arr(N);for(auto e : nums) arr[e] += e;vector<int> f(N);vector<int> g(N);for(int i = 1;i < N;i++){f[i] = g[i -1] + arr[i];g[i] = max(f[i- 1],g[i -1]);} return max(f[N -1],g[N -1]);}
};

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

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

相关文章

PyQt5学习系列之基础知识“字典”

PyQt5学习系列之基础知识——字典” 啰嗦字典使用字典取值与赋值其他使用 总结 啰嗦 在项目中使用到解析数据存放在字典中&#xff0c;对字典中的数据进行数据转化。即需要使用到字典&#xff0c;并对字典中的数据取值。 字典 一种可变容器模型存储任意类型对象每个键值对&am…

视频监控管理平台智能边缘分析一体机安防管理平台客流统计检测算法商场的场景应用方案

随着科技的不断发展&#xff0c;智能化技术已经广泛应用于各个领域。在商业领域&#xff0c;智能边缘分析一体机作为一种新兴的技术手段&#xff0c;为商场提供了一种高效、准确的客流统计方法。本文将探讨智能边缘分析一体机在商场客流统计中的应用方案。 商场作为人们日常生活…

【c语言】自定义类型-结构体

结构体 结构体的声明与使用结构体的声明与初始化结构体的自引用 结构体的内存对齐对齐规则为什么存在内存对齐修改默认对齐数 结构体的传参结构体实现位段什么是位段位段的内存分配位段的跨平台问题位段使用的注意事项 结构体&#xff1a;是一个自定义的类型&#xff0c;成员可…

利用CY3-COOH的羧基官能团标记蛋白质-星戈瑞

蛋白质作为生命体系中的关键分子&#xff0c;参与众多生物过程。因此&#xff0c;对蛋白质进行特异性标记和追踪是生物学研究中不可或缺的一环。CY3-COOH作为一种带有羧基官能团的荧光染料&#xff0c;具有强烈且稳定的荧光性质&#xff0c;被应用于蛋白质的标记和可视化。 标…

【微信小程序】事件绑定和事件对象

文章目录 1.什么是事件绑定2.button组件3.事件绑定4.input组件 1.什么是事件绑定 小程序中绑定事件与在网页开发中绑定事件几乎一致&#xff0c;只不过在小程序不能通过on的方式绑定事件&#xff0c;也没有click等事件&#xff0c;小程序中 绑定事件使用bind方法&#xff0c;c…

外贸实战|做外贸要主动,才会跟客户有订单!

很多人对我说过这种情况&#xff1a;客户给我发了一份询盘&#xff0c;但是我回复以后&#xff0c;客户就不理我了&#xff0c;好伤心。 我问&#xff1a;你跟了多久了&#xff1f; 很多人都会回答&#xff1a;几天或者不记得&#xff0c;他不理我&#xff0c;我也不知道怎么…

Redis页面优化

文章目录 1.Redis页面缓存1.思路分析2.首先记录一下目前访问商品列表页的QPS1.线程组配置10000次请求2.请求配置3.开始压测1.压测第一次 平均QPS为6122.压测第二次 平均QPS为6153.压测第三次 平均QPS为617 3.然后记录一下访问商品详情页的QPS1.线程组配置10000次请求2.请求配置…

AIGC简介:如何利用人工智能进行内容生成

目录 一、引言二、AIGC的定义与技术原理1. 定义说明2. 关键技术3. 技术原理 三、AIGC的主要应用领域1. 文本内容生成2. 图像和视频生成3. 音频内容的创建4. 数据分析与报告 四、实施AIGC的步骤和方法1. 定义项目目标2. 数据准备与处理3. 选择合适的工具和技术4. 模型训练与测试…

服务器数据恢复—raid5阵列上分配的卷被删除后重建如何恢复被删除卷的数据?

服务器存储数据恢复环境&#xff1a; 某品牌FlexStorage P5730服务器存储&#xff0c;存储中有一组由24块硬盘组建的RAID5阵列&#xff0c;包括1块热备硬盘。 服务器存储故障&#xff1a; 存储中的2个卷被删除&#xff0c;删除之后重建了一个新卷。需要恢复之前删除的一个卷的数…

头文件和源文件的一些情况分析

c函数的定义和声明 函数和变量的声明可以有多次,但是定义只能有一次 其实头文件可以写函数的定义,但是在工程里面很多人引用这个头文件很容易造成重复定义的情况 有一个例外情况头文件里面也可以写函数定义或者变量定义 一般情况 //2.h #pragma once int add(int a, int b…

百分之九十的人都忽视了JMeter响应断言中的这个实用功能—— Jmeter Variable Name to use

JMeter的响应断言 相信对于使用过JMeter的同学来学&#xff0c;一定都使用过响应断言&#xff0c;在这里我就不相信介绍了&#xff0c;我们可以简单的理解为&#xff1a; JMeter的响应断言是一种用于检查测试中得到的响应数据是否符合预期的工具&#xff0c;旨在保证性能测试…

2024最新python入门教程|python安装|pycharm安装

前言&#xff1a;在安装PyCharm之前&#xff0c;首先需要明确PyCharm是一款功能强大的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;由JetBrains公司开发。PyCharm旨在通过提供智能代码补全、语法高亮、代码检查、快速导航和重构等丰富的编码辅助工具&#xff0c…

在无GPU的windows上运行ChatTTS

如果你在安装的过程中出现了下面的错误&#xff0c;不妨先看看这些安装步骤&#xff1a; cl: 命令行 error D8021 :无效的数值参数“/Wno-register” error: command C:\ windows ERROR: Failed building wheel for pynini 卷完了文本&#xff0c;卷图片&#xff0c;卷完了图…

AI 入门指南二 :AI提示词(Prompt)

一&#xff0c;提示词的定义 提示词在中文中意为“触发”&#xff0c;在自然语言处理&#xff08;NLP&#xff09;的领域&#xff0c;它更接近于一个“心领神会”的概念&#xff0c;而非具有明确定义的术语。 简而言之&#xff0c;提示词是用户对大型语言模型的输入&#xff0…

电脑自动关机怎么设置?简单3步就能搞定

电脑自动关机功能在许多场景下非常实用&#xff0c;例如下载大文件后自动关机、长时间不使用电脑后自动关机以节省能源等。通过合理设置自动关机&#xff0c;可以提高电脑使用的便利性和节能效果。本文将介绍电脑自动关机怎么设置的三种方法&#xff0c;帮助您根据不同需求灵活…

详解51种企业应用架构模式

文章目录 什么是企业应用企业应用的种类企业架构模式关于作者 导读&#xff1a;企业应用包括哪些&#xff1f;它们又分别有哪些架构模式&#xff1f;世界著名软件开发大师Martin Fowler给你答案 什么是企业应用 我的职业生涯专注于企业应用&#xff0c;因此&#xff0c;这里…

物理隔离条件下文件交换的防泄密U盘,企业该如何选择?

对于网络安全要求高的企业和单位&#xff0c;往往采用物理隔离的方式进行网络建设&#xff0c;如政府单位、军工、科研所、航空航天企业、以及部分金融机构、医疗单位、电力企业、生物制药实验室等。 但物理隔离后&#xff0c;仍然存在着隔离网间的数据交换需求&#xff0c;此时…

AIGC专栏11——EasyAnimateV2结构详解与Lora训练 最大支持768x768 144帧视频生成

AIGC专栏11——EasyAnimateV2结构详解与Lora训练 最大支持768x768 144帧视频生成 学习前言源码下载地址EasyAnimate V2简介技术储备Diffusion Transformer (DiT)Motion ModuleU-VITLora 算法细节算法组成视频VAE视频DIT 数据处理视频分割视频筛选视频描述 模型训练视频VAE视频D…

vue动态加载组件import引入组件找不到组件(Error: Cannot find module)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

Flutter开发效率提升1000%,Flutter Quick教程之定义Api(三)

将tab键切换到Response&#xff0c;会出现这么一个界面 这是添加api返回的json数据。比如我们添加一个json数据。 添加完json数据后&#xff0c;右上角有一个删除按钮。要换json数据的话&#xff0c;可以点击清除再重新输入。 这时候&#xff0c;左边的面板上还会显示出 这个的…