LeetCode刷题--- 按摩师

news2024/11/17 11:28:40

个人主页:元清加油_【C++】,【C语言】,【数据结构与算法】-CSDN博客

个人专栏

力扣递归算法题

 http://t.csdnimg.cn/yUl2I

【C++】    

​​​​​​http://t.csdnimg.cn/6AbpV

数据结构与算法

 ​​​http://t.csdnimg.cn/hKh2l


前言:这个专栏主要讲述动态规划算法,所以下面题目主要也是这些算法做的  

我讲述题目会把讲解部分分为3个部分:
1、题目解析

2、算法原理思路讲解

3、代码实现


按摩师

题目链接:按摩师

题目

一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。

注意:本题相对原题稍作改动

示例 1:

输入: [1,2,3,1]
输出: 4
解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。

示例 2:

输入: [2,7,9,3,1]
输出: 12
解释: 选择 1 号预约、 3 号预约和 5 号预约,总时长 = 2 + 9 + 1 = 12。

示例 3:

输入: [2,1,4,5,3,1,1,3]
输出: 12
解释: 选择 1 号预约、 3 号预约、 5 号预约和 8 号预约,总时长 = 2 + 4 + 3 + 3 = 12。

解法

算法原理讲解

我们这题使用动态规划,我们做这类题目可以分为以下五个步骤

  1. 状态显示
  2. 状态转移方程
  3. 初始化(防止填表时不越界)
  4. 填表顺序
  5. 返回值
  • 状态显示
dp[i] 表示 :选择到 i 位置时,此时的最⻓预约时⻓。
但是我们这个题在 i 位置的时候,会⾯临「选择」或者「不选择」两种抉择,所依赖的状态需要细分:
  • f[i] 表示:选择到 i 位置时, nums[i] 必选,此时的最⻓预约时⻓;
  • g[i] 表示:选择到 i 位置时, nums[i] 不选,此时的最⻓预约时⻓。
  • 状态转移方程
因为状态表⽰定义了两个,因此我们的状态转移⽅程也要分析两个:
  • 对于 f[i] 如果 nums[i] 必选,那么我们仅需知道 i - 1 位置在不选的情况下的最⻓预约时⻓, 然后加上 nums[i] 即可,因此 f[i] = g[i - 1] + nums[i]
  • 对于 g[i] 如果 nums[i] 不选,那么 i - 1 位置上选或者不选都可以。因此,我们需要知道 i - 1 位置上选或者不选两种情况下的最⻓时⻓,因此 g[i] = max(f[i - 1], g[i-1])。
  • 初始化(防止填表时不越界)
这道题的初始化⽐较简单,因此⽆需加辅助节点,仅需初始化 f[0] = nums[0], g[0] = 0
即可。
  • 填表顺序
根据「状态转移⽅程」得「从左往右,两个表⼀起填」。
  • 返回值
根据「状态表⽰」,应该返回 max(f[n - 1], g[n - 1])

代码实现

class Solution {
public:
    int massage(vector<int>& nums) 
    {
        int n = nums.size();
        if(n == 0) return 0; // 处理边界条件

        vector<int> f(n);
        auto g = f;
        f[0] = nums[0];
        for(int i = 1; i < n; i++)
        {
            f[i] = g[i - 1] + nums[i];
            g[i] = max(f[i - 1], g[i - 1]);
        }
        return max(f[n - 1], g[n - 1]);
    }
};

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

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

相关文章

监督学习 - 支持向量回归(Support Vector Regression,SVR)

什么是机器学习 支持向量回归&#xff08;Support Vector Regression&#xff0c;SVR&#xff09;是一种基于支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;的回归算法&#xff0c;用于解决回归问题。与传统的回归算法不同&#xff0c;SVR的目标是…

微短剧市场暴涨267.65%,用微短剧场景AUI Kit精巧入局

微短剧&#xff0c;不仅上头&#xff0c;更要上心。 微短剧&#xff0c;深度“拿捏”了这个碎片化时代&#xff0c;也是刚过去的2023年绕不开的热词。 与传统影视剧制作精益求精、耗时长相反&#xff0c;门槛与耗时“双低”恰恰成为了微短剧的独特优势&#xff0c;使其走上以量…

使用numpy处理图片——图片拼接

大纲 左右拼接上下拼接 在《使用numpy处理图片——图片切割》一文中&#xff0c;我们介绍了如何使用numpy将一张图片切割成4部分。本文我们将反其道而行之&#xff0c;将4张图片拼接成1张图片。 基本的思路就是先用两张图以左右结构拼接成上部&#xff0c;另外两张图也以左右拼…

台灯实测PK:书客、明基、孩视宝护眼台灯,谁能为你带来舒适的光明体验?

现代生活中&#xff0c;我们频繁面对电子屏幕&#xff0c;对眼睛造成一定压力&#xff0c;长时间后会感到眼睛疲劳。特别是家长留意到&#xff0c;孩子在不适宜的灯光下长时间学习或玩耍时&#xff0c;会揉眼或表现出不适。为了更好地保护视力健康&#xff0c;选择一款护眼台灯…

Java多线程并发篇----第八篇

系列文章目录 文章目录 系列文章目录前言一、简述一下你对线程池的理解二、线程生命周期(状态)三、新建状态(NEW)四、就绪状态(RUNNABLE)五、运行状态(RUNNING)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站…

爬虫到底违法吗?你离违法还有多远?

最近&#xff0c;国家依法查处了部分编写爬虫程序&#xff0c;盗取其他公司数据的不良企业。一时间风声鹤唳&#xff0c;关于爬虫程序是否违法的讨论遍布程序员圈子。那么到底编写爬虫程序是否违法呢&#xff1f; 其爬虫下载数据&#xff0c;一般而言都不违法&#xff0c;因为…

PHP+MySQL开发组合:开源在线课堂知识付费小程序源码系统,附带完整的搭建教程

互联网的快速发展&#xff0c;知识付费已经成为一种新的商业模式。越来越多的人希望通过在线学习来提升自己的知识和技能。为了满足这一市场需求&#xff0c;罗峰给大家分享一款基于PHP和MySQL的在线课堂知识付费小程序源码系统。该系统可帮助用户快速搭建自己的在线课堂平台&a…

亚信安全发布2024年网络安全威胁十大预测

2024年将是迎接网络安全新挑战的一年。随着经济和政治领域数字化发展&#xff0c;企业将越来越多地利用人工智能、机器学习 (AI/ML)、云等新型技术。虽然这些创新为企事业单位发展及运营提供了帮助&#xff0c;提高了效率&#xff0c;但它们同时也为攻击者提供了机会。 2024年&…

四川古力未来科技有限公司:抖音小店的崛起之路

随着互联网的飞速发展&#xff0c;电子商务已经成为人们日常生活中不可或缺的一部分。作为一家以科技为核心的公司&#xff0c;四川古力未来科技有限公司在电子商务领域中崭露头角&#xff0c;特别是其抖音小店的发展引人注目。 四川古力未来科技有限公司的抖音小店自开业以来&…

对象存储MinIO的简介与部署

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 相关文章推荐&#xff1a; 记录一次跨越16个月的minio版本升级与数据迁移 MinIO集群怎么接入Prometheus监控&#xff1f;(上) Mi…

vue3、vue2文件导入事件

一、vue3写法 1、html部分 <el-buttontype"info"plainicon"Upload"click"handleImport"v-hasPermi"[system:user:import]">导入</el-button><!-- 导入对话框 --><el-dialog :title"upload.title" v-…

如何使用网络测试仪构造特殊流量

为什么要仿真特殊流量 在现网中&#xff0c;网络流量时常伴随着突发&#xff0c;突发流量可能会造成网络的拥塞&#xff0c;从而产生丢包、抖动和时延&#xff0c;导致网络服务质量整体下降。面对宏观上的突发&#xff0c;通常采用在网络设备入向限速或者流量整形功能来消除突…

【Vue】引入路径正确,不影响正常运行但文件爆红

现象&#xff1a;引入路径正确但文件爆红&#xff0c;不影响运行但不美观&#xff08;按住Ctrl可以跳转到该文件&#xff0c;关闭后过段时间再打开还是爆红&#xff09; 原因 &#xff08;1&#xff09;相对路径使用了不正确的大小写 &#xff08;2&#xff09;项目不支持force…

PM50-40、PM50-45、PM50-52比例电控柱塞泵控制器

电比例轴向变量柱塞泵控制放大器技术是一种高效的液压动力传动技术。它通过将电液比例控制技术与轴向变量柱塞泵相结合&#xff0c;实现了液压泵的高精度、高效率和低噪声运行。以下是该技术的主要特点和应用&#xff1a;控制原理&#xff1a;基于双向电液比例变排量轴向柱塞泵…

ubuntu18.04.6 搭建mqtt服务器emqx 之docker方式

ubuntu18.04.6 搭建mqtt服务器emqx 之docker方式 前提docker环境已经安装好 如未安装&#xff0c;请参考博文https://blog.csdn.net/a554521655/article/details/134251763 文章目录 ubuntu18.04.6 搭建mqtt服务器emqx 之docker方式安装emqx查看是否安装并启动成功登录前端查 安…

记录一次数据中包含转义字符\引发的bug

后端返回给前端的数据是: { "bizObj": { "current": 1, "orders": [ ], "pages": 2, "records": [ { "from": "1d85b8a4bd33aaf99adc2e71ef02960e", …

Linux(Centos7)安装 jenkins(jdk11+jenkins2.375),并配置JDK,Maven,Git,GitLab

安装步骤 1. JDK11安装2. Maven安装3. git安装4. Jenkins2.375安装4.1 设置中文显示4.2 端口,用户权限修改4.3 插件下载4.4 全局工具配置4.4.1 Maven配置4.4.2 JDK配置4.4.3 Git配置 4.5 系统配置4.5.1 Gitee配置 4.6 构建测试 1. JDK11安装 #下载 yum -y install fontconfig …

2023 年最值得推荐的11个视频转换器(免费和付费)

拥有一个视频转换器供您使用意味着您可以轻松地在任何设备上播放所有视频。我们展示了适用于 Windows 的最佳视频转换器&#xff0c;这样您就不必浪费时间使用不合格的工具。 录制、编辑和分享视频是人生最大的消遣之一。有如此多的设备能够捕捉视频——而且共享它们的途径也很…

除硼滤料TRAPPSORB

吸附剂产品是Watch Water的 核心业务&#xff0c;Watch Water是最 大的创新水处理公司之一&#xff0c;公司 主营业务包括过滤和吸附剂产品. 每个 球粒直径通常在2-5毫米范围内 的&#xff0c;可用于固定床吸附污染物。不过 球粒尺寸可以根据客户的具体需求生产。 经过我们40年…

网页设计达人的首选!这6款顶级工具助你设计完美网页!

即时设计 即时设计是国内为当地设计师量身定制的完全免费的网页设计工具。是集成原型、设计、交互、交付等所有网页设计需求的一站式设计平台。内部集成了大量优秀的插件&#xff0c;包括组件、图标、字体、色板、填充等功能&#xff0c;基本涵盖了网页设计师常用的大部分工具…