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

面试题-17.16 按摩师

时间:2024-06-19 08:58:49浏览次数:26  
标签:面试题 预约 len 接待 int 客户 17.16 按摩师 dp

力扣题目

解题思路

java代码

力扣题目:

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

示例 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. 确定状态:每次可以选择接待或不接待一位客户。因此,可以使用一个二维数组dp来表示当前到第i位客户时的最长预约时长。dp[i][0]表示不接待第i位客户时的最长预约时长,dp[i][1]表示接待第i位客户时的最长预约时长。

2. 初始状态:初始化dp[0][0]为0,表示第一个客户不接待时的预约时长为0,dp[0][1]为nums[0],表示第一个客户接待时的预约时长为nums[0]。

3. 状态转移方程:根据当前状态的不同选择(接待或不接待),更新下一状态的预约时长。对于第i位客户,如果选择不接待,则当前状态的最长预约时长为前一位客户接待和不接待两种状态中的最大值;如果选择接待,则当前状态的最长预约时长为前一位不接待的状态加上当前客户的预约时长。

4. 最终结果:遍历所有客户后,最终的最长预约时长为dp[len-1][0]和dp[len-1][1]中的较大值,即最后一位客户接待和不接待两种状态下的最长预约时长。
 

java代码:

package org.example;

public class M1716 {
    public static void main(String[] args) {
        M1716 a = new M1716();
        System.out.println(a.massage(new int[]{2,1,4,5,3,1,1,3}));
    }

    public int massage(int[] nums) {
        int len = nums.length;
        if (len == 0 || len == 1) {
            return len == 0 ? 0 : nums[0];
        }
        int[][] dp = new int[len][2];
        // 初始值
        dp[0][0] = 0; // 第一个客户不接
        dp[0][1] = nums[0]; // 第一个客户接
        for (int i = 1; i < len; i++) {
            // 如果第i个客户不接
            dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1]);
            // 如果第i个客户接了
            dp[i][1] = dp[i - 1][0] + nums[i];
        }
        // 最终返回最长预约时长
        return Math.max(dp[len - 1][0], dp[len - 1][1]);
    }
}

标签:面试题,预约,len,接待,int,客户,17.16,按摩师,dp
From: https://blog.csdn.net/LIUCHANGSHUO/article/details/139789053

相关文章

  • MySQL常见的后端面试题,你会几道?
     为什么分库分表单表数据量过大,会出现慢查询,所以需要水平分表可以把低频、高频的字段分开为多个表,低频的表作为附加表,且逻辑更加清晰,性能更优随着系统的业务模块的增多,放到单库会增加其复杂度,逻辑不清晰,不好维护,所以会对业务进行微服务拆分,同时拆分数据库怎么分库分......
  • Reids高频面试题汇总总结
    一、Redis基础Redis是什么?Redis是一个开源的内存数据存储系统,它可以用作数据库、缓存和消息中间件。Redis支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等,并提供了丰富的操作命令来操作这些数据结构。Redis的主要特点是什么?高性能:Redis将数据存储在......
  • 程序分享--常见算法/编程面试题:判断子序列
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......
  • [面试题]Nginx
    [面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]SpringBoot[面试题]SpringCloud[面试题]SpringMVC[面试题]Spring[面试题]MyBatis[面试题]Nginx请解释一下什么是Nginx?Nginx,是一个Web服务......
  • Spark 面试题(十五)
    1.简述Spark怎么保证数据不丢失?Spark通过多种机制来确保数据的可靠性和不丢失,即使在发生节点故障或其他异常情况时。以下是Spark保证数据不丢失的一些关键策略:RDD的不变性:RDD是不可变的,每个RDD都记录了其创建的血统信息(Lineage),这允许Spark重新计算丢失的分区。数据......
  • Spark 面试题(十六)
    1.简述Spark运行时并行度的设置?在Spark中,“并行度”(Parallelism)通常指的是作业中同时执行的任务数量。这个数量决定了在任何给定时间可以有多少任务并发运行,进而影响作业的执行效率和资源利用。以下是设置Spark运行时并行度的一些关键点:默认并行度:如果没有明确设置,Spa......
  • 前端面试题-基础篇(一)
    最近在准备面试,搜集了一些偏基础的面试题,简单记录一下。1、列举一些常用的ES6新特性1、const、let(块级作用域{})不存在变量提升,不能在变量声明之前使用,且只在当前作用域有效,避免了全局命名冲突let用来声明变量,const用来声明常量,const声明的值不能被修改(对于引用类型,指的是......
  • 前端面试题日常练-day75 【面试题】
    题目希望这些选择题能够帮助您进行前端面试的准备,答案在文末在Sass中,以下哪个功能用于生成带有浏览器前缀的CSS属性?a)@extendb)@mixinc)@importd)@includeSass中的函数(Function)用于什么目的?a)执行数学计算b)定义样式块c)导入外部文件d)引用父级选择器......
  • 2024hw蓝队面试题--5
    了解哪些中间件我了解的中间件有很多种,其中包括但不限于:Nginx、Apache、Tomcat、Redis、RabbitMQ、Kafka、Zookeeper等。常见漏洞有:未授权的访问、代码执行漏洞、配置错误、解析错误漏洞等漏洞struts2有哪些漏洞,有什么特征?远程代码执行漏洞:如S2-045,在该漏洞中,当开发者使用基......
  • 2024hw蓝队面试题--6
    请说一下内网渗透流程1.信息收集:熟悉内部网络环境,了解目标机制、服务器参数、应用信息等。工具包括方正、nmap、Wireshare等。2.漏洞扫描:利用工具对目标内网进行扫描,发现系统漏洞或者敏感信息泄漏问题。3.漏洞利用:通过已知的漏洞,获取操作系统的控制权限。这里的工具可以包括......