首页 > 其他分享 >面试题 17.16. 按摩师

面试题 17.16. 按摩师

时间:2023-09-07 20:34:09浏览次数:33  
标签:面试题 12 预约 位置 我们 17.16 接收 按摩师

按摩师(easy)

题目链接:

面试题 17.16. 按摩师

题目描述:

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

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

示例 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。

题目解析

这道题目时这样的,我们得到一系列预约,每个预约都要花费一些时间,我们如何选让我们工作的时间更多,毕竟钱比较多吗.不过接收预约是有一定的规则的,例如我们接收了一个预约,那么此时下一个预约我不能接收了,毕竟我要休息.

算法原理

状态表示

按照经验,我们以...为结尾表示状态.

dp[i]:表示以i位置为结尾,我们可以等到更多的时间,不过此时我们需要知道是,在i位置,我们可以选这个预约,也可以不选这个预约.此时我们可以定义两个状态.

f[i]: 表示以i位置为结尾,我们接收i位置的预约,可以等到更多的时间.

g[i]: 表示以i位置为结尾,我们不接收i位置的预约,可以等到更多的时间.

状态转移方程

f[i]: 如果我们想要接收i位置,那么i-1位置不可以接收, f[i] = g[i-1]+v[i]

g[i]: 不接受i位置,那么i-1位置可以接收,也可以不接受 g[i] = max(f[i-1], g[i-1]);

初始化

借助了i-1位置,那么此时我们多加上一个节点,这里需要注意的,我们给f[0] = 0,g[0] = 0.

填表顺序

从左向由填,此时一起填.

返回值

返回f[n]和g[n]的最大值

编写代码

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

image-20230907194500922

标签:面试题,12,预约,位置,我们,17.16,接收,按摩师
From: https://blog.51cto.com/byte/7401035

相关文章

  • Android并发编程高级面试题汇总(含详细解析 十八)
    Android并发编程高级面试题汇总最全最细面试题讲解持续更新中......
  • Linux运维工程师面试题(8)
    Linux运维工程师面试题(8)祝各位小伙伴们早日找到自己心仪的工作。持续学习才不会被淘汰。地球不爆炸,我们不放假。机会总是留给有有准备的人的。加油,打工人!1docker的网络类型,使用场景none:在使用none模式后,Docker容器不会进行任何网络配置,没有网卡、没有IP也没有路由,因此......
  • 构建可扩展的应用:六边形架构详解与实践 【含面试题】
    面试题分享2023最新面试合集链接2023大厂面试题PDF面试题PDF版本java、python面试题项目实战:AI文本OCR识别最佳实践AIGamma一键生成PPT工具直达链接玩转cloudStudio在线编码神器玩转GPUAI绘画、AI讲话、翻译,GPU点亮AI想象空间史上最全文档AI绘画stablediffusion资......
  • Linux运维工程师面试题(7)
    Linux运维工程师面试题(7)祝各位小伙伴们早日找到自己心仪的工作。持续学习才不会被淘汰。地球不爆炸,我们不放假。机会总是留给有有准备的人的。加油,打工人!1常用的ansible模块有哪些PingCommandShellScriptCopyFetchFileYumServiceUserGroupLineinfileRepla......
  • Linux运维工程师面试题(7)
    目录Linux运维工程师面试题(7)1常用的ansible模块有哪些2说一下ansible使用roles编排的目录结构3docker六大命名空间namespace4cgroups的作用5runc的作用6docker常用的命令7docker存储引擎有哪些,区别是什么8进入docker容器有几种方法,区别是什么9Dockerfile......
  • Android并发编程高级面试题汇总(含详细解析 十七)
    Android并发编程高级面试题汇总最全最细面试题讲解持续更新中......
  • 【面试题精讲】MySQL中覆盖索引是什么
    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top首发博客地址系列文章地址在MySQL中,覆盖索引是一种特殊类型的索引,它包含了查询所需的所有列,而不仅仅是索引列本身。当一个查询可以完全使用覆盖索引来满足时,MySQL可以直接从......
  • ##线程面试题##
    一.java中线程实现几种实现方式在Java中实现多线程一共有四种方式:(1)继承Thread类(2)实现Runable接口(3)实现Callable接口(4)线程池1.继承java.lang.Thread,重写run方法,启动线程,调用start()方法>2.实现java.lang.Runnable接口,实现run方法3.实现Callable接口(JDK8新特性)该方法效率较低,......
  • Linux运维工程师面试题(6)
    Linux运维工程师面试题(6)祝各位小伙伴们早日找到自己心仪的工作。持续学习才不会被淘汰。地球不爆炸,我们不放假。机会总是留给有有准备的人的。加油,打工人!1数据库事务的四个特性及含义数据库事务的4个特性:原⼦性、持久性、⼀致性、隔离性原⼦性:整个事务中的所有操作要么......
  • 面试题:spring中有两个id相同的bean对象会报错吗?
    一个xml文件声明两个beanid相同的对象,在项目启动时就会报错(对xml解析)。要求beanId唯一,该beanId元素标签已经被使用。两个xml文件声明相同beanId的对象,项目启动是没有问题的。使用时,属性值是后加载的对象值(先加载的会被后加载的覆盖)@Configuration注解+@Bean注解声明的相同......