Java 动态规划 面试题 17.16. 按摩师

news2024/11/27 10:41:36

 

代码展示:

class Solution {
    public int massage(int[] nums) {
        int n=nums.length;
        if(n==0){
            return 0;
        }
        //创建数组
        int f[]=new int[n]; //f[i]表示接i位置的最长时间
        int g[]=new int[n]; //g[i]表示不接i位置的最长时间
        //初始化
        f[0]=nums[0];g[0]=0;
        //填充数组
        for(int i=1;i<=n-1;i++){
            f[i]=g[i-1]+nums[i];
            g[i]=Math.max(f[i-1],g[i-1]);
        }
        //返回值
        return Math.max(f[n-1],g[n-1]);
    }
}

        通过动态规划来解决该问题,通过动态规划的5大步骤分析解决

        1.状态表示

                在该题中对于每一个预约,我们有接受和不接受两个选择,而不同的选择会有不同的结果,所以我们可以用f【i】来表示接受i位置的预约所得到的最长预约时长,用g【i】来表示不接受i位置的预约所得到的最长时长。所以该题要用到两个数组

        2.状态转移方程

                从最近的一步进行分析,对于i位置的预约来说,我们可以选择接受和不接受

                接受:接受了i位置的预约,我们便不能接受i-1位置的预约,而不接受i-1位置的预约后的最长时长为g【i-1】,再加上i位置的预约时长便是接受了i位置预约的最长时长,即f[i]=g[i-1]+nums[i];

                不接受:不接受i位置的预约,我们此时可以选择接受i-1位置的预约,也可以选择不接受i-1位置的预约,由于要选择最长时长,所以我们要比较接受i-1位置预约的时长和不接受i-1位置预约的时长即f【i-1】的值和g【i-1】值,选择较大的一方,即 g[i]=Math.max(f[i-1],g[i-1]);

        3.初始化

                根据状态转移方程,只有0下标会溢出,则初始化0下标即可。

        4.填充数组

                根据状态转移方程从左到右填充两个数组

        5.返回值

                最后我们得到了对于最后一个预约接受时的最长时长j【n-1】,和不接受时的最长时长g【n-1】,我们通过比较选择较大的即可,即 return Math.max(f[n-1],g[n-1]);

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

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

相关文章

VectorCAST单元测试手动配置测试用例

一、单元测试 等待环境创建完成后&#xff0c;就可以开始单元测试。 二、生成测试用例 在 VectorCAST 中&#xff0c;一共有两种方法来生成测试用例&#xff0c;一种是手动生成测试用例&#xff0c;另外一种是自动 生成测试用例。 三、手动生成测试用例 在 VectorCAST 中&a…

《面试1v1》Redis分布式锁

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

泛微E-Cology SQL注入漏洞复现(QVD-2023-15672)

0x01 产品简介 泛微协同管理应用平台e-cology是一套兼具企业信息门户、知识文档管理、工作流程管理、人力资源管理、客户关系管理、项目管理、财务管理、资产管理、供应链管理、数据中心功能的企业大型协同管理平台。 0x02 漏洞概述 由于泛微e-cology未对用户的输入进行有效的…

matlab学习指南(2):安装工具箱Toolbox的方法(详细图解)

&#x1f305;*&#x1f539;** φ(゜▽゜*)♪ **&#x1f539;*&#x1f305; 欢迎来到馒头侠的博客&#xff0c;该类目主要讲数学建模的知识&#xff0c;大家一起学习&#xff0c;联系最后的横幅&#xff01; 喜欢的朋友可以关注下&#xff0c;私信下次更新不迷路&#xff0…

【项目 进程1】2.1 进程概述 2.2 进程状态转换

文章目录 2.1进程概述程序和进程**时间片****并行和并发****进程控制块(PCB)** 2.2进程状态转换**进程的状态** **进程相关命令****实时显示进程动态** 2.1进程概述 程序和进程 程序是包含一系列信息的文件&#xff0c;这些信息描述了如何在运行时创建一个进程&#xff1a; …

Linux的软链接与硬链接

Linux的软链接与硬链接 1&#xff0c;创建硬链接&#xff1a;2&#xff0c;创建软链接&#xff1a;3&#xff0c;软链接是什么4&#xff0c;软链接文件的权限5&#xff0c;硬链接是什么6&#xff0c;做个小实验 总结问题&#xff1a;为什么有软链接了&#xff08;快捷方式&…

Centos7.9通过expect脚本批量修改H3C交换机配置

背景&#xff1a; 公司有几百台H3C二层交换机设备&#xff0c;当需要批量更改配置时非常的消耗工作量 解决&#xff1a; 通过一台Linux服务器&#xff0c;编写shell脚本&#xff0c;模拟Telnet至各台交换机&#xff0c;让一切变的很容易 1.首先在安装Telnet服务前需要检测centO…

Java基础(动力节点课程)

JavaSE基础——第一章初识Java JavaSE JavaEE JavaMEJavaSEJavaEEJavaME Java语言跨平台性垃圾回收机制Java的加载和执行JDK、JRE、JVM关系安装JDK以及配置PATHJDK目录说明 第一个Java程序javac命令和java命令的具体用法javac命令的用法&#xff1a;java命令的用法&#xff1a;…

Transformer网络学习记录——基于空间约束自注意力和Transformer的RGB-D显著性检测方法研究

基于图半监督学习和图卷积的目标分割与跟踪算法研究 (wanfangdata.com.cn) 只能说看不懂&#xff0c;记录是为了有耐心慢消化 原文&#xff1a; 网络整体为通用的编码器-解码器架构 &#xff0c;总体上由骨干编码器、交互编码器、RGB 解码器、深度解码器组成。 具体来说&#…

ROCKSDB原理

按照读写的性质来分 分为读少写多和 写少读多 RocksDB适用于第一种。 磁盘中的数据结构 就地写和追加写 找到某一个页 然后将数据刷入到这一个页中. 这就导致了一个问题 就是追加写入的数据冗余 由于存在数据冗余 所以必须要对数据进行一定的处理才能保持查找性能 数据以块…

langchain系列:Model I/O模块之-Prompts

文章目录 Model I/O简介输入部分&#xff08;Prompts&#xff09;PromptTemplatefrom_template ChatPromptTemplate langchain是基于大语言模型而开发的一个框架&#xff0c;既然是基于大语言模型&#xff0c;自然最重要的就是先要介绍Model I/O模块。 Model I/O简介 Model I/O…

Helm3安装和使用

Helm3安装和使用 1、Helm简介 Helm 是 Kubernetes 上的包管理器&#xff0c;用来管理 Kubernetes 应用程序&#xff0c;Helm Charts 可帮助您定义&#xff0c;安装和升级 复杂的 Kubernetes 应用程序。Helm 把 Kubernetes 资源(比如deployments、services或ingress等) 打包到…

ProtoBuf的学习并且制作了一个网络通讯录项目

Linux环境下载安装ProtoBuf编译器 1. 安装依赖库 Ubuntu用户选择 sudo apt-get install autoconf automake libtool curl make g unzip -yCentos用户选择 sudo yum install -y autoconf automake libtool curl make gcc-c unzip2. 下载ProtoBuf编译器 Github地址&#xff…

kmalloc与vmalloc如何选择

kmalloc和vmalloc都是Linux内核中用于内存分配的函数&#xff0c;但它们适用于不同的内存分配场景。 kmalloc函数用于在内核空间中分配小块&#xff08;通常小于一个页面大小&#xff09;的连续内存区域&#xff0c;这些内存区域可以用于存储内核数据结构和缓冲区等。kmalloc内…

MySQL与Oracle的粗略对比

前言 首先先说自己的感受&#xff0c;我第一次使用Oracle是在我第一次的实习当中&#xff0c;包括我也在Leetcode中做了一些题目来练习&#xff0c;大家也可以做做&#xff0c;还是有收获的。 首先&#xff0c;我之前一直听说Oracle是要付费的&#xff0c;但其实它有免费版&am…

使用nvm use 切换node版本失败

使用nvm use 切换node版本失败 exit status 1: Access is denied.(或者显示乱码)解决方法一&#xff1a; 使用管理员的方式运行 解决方法二&#xff1a; 还有一种可能&#xff0c;在安装nvm之前电脑中已经安装过node&#xff0c;所以会导致切换失败&#xff0c;&#xff08…

【Java练习题汇总】《第一行代码JAVA》入门介绍篇程序基本概念篇,汇总Java练习题——基础语法:变量、数据类型、运算符、控制流... ~

Java练习题 入门介绍篇&程序基本概念篇 1️⃣ 入门介绍篇习题2️⃣ 程序基本概念篇习题 1️⃣ 入门介绍篇习题 一、填空题 Java 源程序文件的后缀是_______, Java 字节码文件的后缀名称是_______。Java 程序实现可移值性&#xff0c;依靠的是______________。Java 语言的…

C++中的类型转化

目录 1.C语言中的类型转化 2.C强制类型转换 2.1、static_cast 2.2、reinterpret_cast 2.3、const_cast 2.4、dynamic_cast 1.C语言中的类型转化 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者返回值类型与…

华为ERP思考:国产自研迈出第一步

华为的进入会刺激用友、金蝶、浪潮等国产厂商加快技术革新&#xff0c;以及伴随着华为自身技术自研全栈的布局和不断测试&#xff0c;国产ERP的兼容性和标准性都将上一个新的台阶。 作者|斗斗 编辑|皮爷 出品|产业家 15小时完成全球88家子公司Meta ERP系统的切换&#x…

c++游戏小技巧6:rand()+随机迷宫(3写法:BFS,DFS,并查集)

目录 1.前言 2.前文(rand,随机数引入) 1.rand() 2.srand&#xff0c;随机数种子 3.用法&#xff1a; 1. 生成0~RAND_MAX里面的数 2.生成大于RAND_MAX的数 3.生成负数 3.正文(确信) 1.bfs写法&#xff1a; 1.让迷宫全是墙确定起点 2.初始化 3.循环操作&#xff1a; 4.总…