LeetCode 按摩师 python

news2024/12/23 12:11:08

目录

 

1.题目描述

2.普通解法(通过部分测试用例)

​编辑

3.动态规划解法

3.题目总结


 

1.题目描述

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/the-masseuse-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.普通解法(通过部分测试用例)

class Solution:
    def massage(self, nums: List[int]) -> int:
        sum = 0
        for i in range(len(nums)):
            tmp = 0
            for j in range(i, len(nums), 2):
                tmp += nums[j]
            if sum<tmp:
                t = tmp
                tmp = sum
                sum = t
        return sum

 

3.动态规划解法

from typing import List

class Solution:
    def massage(self, nums: List[int]) -> int:
        cur, prev = 0, 0
        for num in nums:
            cur, prev = max(prev + num, cur), cur
        return cur
from typing import List

class Solution:
    def massage(self, nums: List[int]) -> int:
        # 初始化当前最大值cur和前一个最大值prev
        cur, prev = 0, 0
        # 遍历数组
        for num in nums:
            # 计算当前最大值cur,选择第i个数或不选择第i个数
            cur, prev = max(prev + num, cur), cur
            # 上一次的最大值prev变成当前最大值cur
            # 上一次的次大值cur变成当前最大值的前一个最大值prev
        # 返回最终结果cur
        return cur

3.题目总结

时间复杂度:O(n),其中n为数组的长度。

空间复杂度:O(1),只需要常数级别的空间来存储当前最大值和前一个最大值。

算法思路

1.定义状态:

dp[i]表示前i个数中选择不相邻的数所能得到的最大和。

2.状态转移方程:

对于第i个数,有两种情况,选择或不选择。如果选择第i个数,则不能选择第i-1个数,所以dp[i] = dp[i-2] + nums[i]。如果不选择第i个数,则dp[i] = dp[i-1]。

综合两种情况,可以得到状态转移方程:dp[i] = max(dp[i-2] + nums[i], dp[i-1])。 3.边界条件:dp[0] = 0,dp[1] = nums[0]。

4.最终结果:dp[n],其中n为数组的长度。

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

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

相关文章

(六)CSharp-CSharp图解教程版-委托

一、委托概述 1、什么是委托 委托和类一样&#xff0c;是一种用户定义类型&#xff08;即是一种类&#xff0c;所以也是一个引用类型&#xff09;。在它们组成的结构方面区别是&#xff0c;类表示的是数据和方法的集合&#xff0c;而委托则持有一个或多个方法。 可以把 deleg…

Spring架构篇--2.7.1 远程通信基础--Netty原理--NioEventLoopGroup

前言&#xff1a;在使用Netty 时不管是服务端还是客户端都需要 new NioEventLoopGroup 对象进行工作&#xff0c;NioEventLoopGroup的作用是什么呢&#xff1b; 1 NioEventLoopGroup 类图&#xff1a; 从类名字来看它是一个Nio 流的事件轮询器组&#xff0c;既然是一组顾名思…

使用dataFEED OPC Suite将西门子PLC数据转发至阿里云RDS数据库

一 背景 工业现场级别的各种设备会产生大量的数据&#xff0c;这些数据包含生产过程的各种信息&#xff0c;在经过数据库等IT应用的处理后&#xff0c;可为企业提供全面的生产数据分析和决策支持。以往工厂的数据库通常部署在本地&#xff0c;然而得益于云计算的快速发展以及云…

k8s harbor镜像仓库搭建

1.前言 Harbor 是一个开源的云原生镜像仓库&#xff0c;用于存储和分发 Docker 镜像。它提供了一些安全性和管理方面的功能&#xff0c;使得用户可以更好地管理和共享 Docker 镜像 2.配置harbor搭建环境 harbor的搭建需要用到docker、docker-compose服务 docker搭建参考&am…

Vivado 下 IP核之双端口 RAM 读写

目录 Vivado 下 IP核之双端口 RAM 读写 1、RAM IP 核简介 2、实验任务 3、程序设计 3.1、RAM IP 核配置 3.2、顶层模块设计 &#xff08;1&#xff09;绘制波形图 4、编写代码 4.1、顶层模块 ip_2port_ram 4.2、RAM 写模块设计 4.3、ram_wr 模块代码 4.4、RAM 读模…

基于graalvm和java swing制作一个文件差异对比的原生应用,附源码

文章目录 1、DFDiff介绍2、软件架构3、安装教程3.1、编译为jar包运行3.2、编译为原生应用运行 4、运行效果图5、项目源码地址 1、DFDiff介绍 当前已实现的功能比较两个文件夹内的文件差异&#xff0c;已支持文件差异对比。 2、软件架构 软件架构说明 开发环境是在OpenJDK17&…

安装 Kafka

文章目录 1.选择操作系统2.配置 Java 环境3.安装 ZooKeeper4.安装 broker&#xff08;1&#xff09;安装 broker&#xff08;2&#xff09;验证是否安装正确 5.配置 broker&#xff08;1&#xff09;常规配置&#xff08;2&#xff09;主题的默认配置 6.配置 Kafka 集群&#x…

CAC2.0全新升级发布,为企业邮箱筑起安全壁垒!

5月31日&#xff0c;Coremail举办了【聚焦盗号&#xff0c;企业邮件安全的威胁分析与应对】直播交流会。直播会上Coremail邮件安全团队就邮箱盗号问题进行了深度分享。 面对如此肆虐的盗号现象和即将到来的攻击暴破高峰期&#xff0c;各行业应该如何应对防护邮箱安全呢&#xf…

什么是防火墙?它有什么作用?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、什么是防火墙 二、防火墙的分类 1、软件防火墙 2、硬件防火墙 三、防火墙的作用 1、防止病毒 2、防止访问不安全内容 3、阻…

如何使用AI帮你制作PPT

一&#xff1a;前言 ChatGPT&#xff1a;智能AI助你畅聊天地 在现代人日益忙碌的生活中&#xff0c;难免需要一些轻松愉快的聊天来放松身心。而现在&#xff0c;有了 ChatGPT&#xff0c;轻松愉快的聊天变得更加智能、有趣且不受时间、地点限制&#xff01; 什么是 ChatGPT&…

嵌入式Linux系统中SPI 子系统基本实现

1、SPI 驱动源文件目录 Linux common spi driver kernel-4.14/drivers/spi/spi.c Linux 提供的通用接口封装层驱动 kernel-4.14/drivers/spi/spidev.c linux 提供的 SPI 通用设备驱动程序 kernel-4.14/include/linux/spi/spi.h linux 提供的包含 SPI 的主要数据结构和函数…

sourcetree的使用

目录 前言 一、Sourcetree简介 二、创建分支与合并分支 三、合并冲突问题 总结 前言 今天提交项目代码时,接触到非常好用方便的可视化Git管理提交软件Sourcetree,今天记录一下使用过程 一、Sourcetree简介 通过Git可以进行对项目的版本管理,但是如果直接使用Git的软件会比…

MinIO快速入门——在Linux系统上安装和启动

1、简介 MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。MinIO系统&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 2、环境搭建&#…

【MySQL】一文带你了解数据库约束

文章目录 1. 约束类型2&#xff0e;PRIMARY KEY&#xff1a;主键约束3&#xff0e;FOREIGN KEY&#xff1a;外键约束4&#xff0e;NOT NULL&#xff1a;非空约束5&#xff0e;UNIQUE&#xff1a;唯一约束5&#xff0e;DEFAULT&#xff1a;默认值约束6&#xff0e;总结 1. 约束类…

用数据说话,R语言有哪七种可视化应用?

今天&#xff0c;随着数据量的不断增加&#xff0c;数据可视化成为将数字变成可用的信息的一个重要方式。R语言提供了一系列的已有函数和可调用的库&#xff0c;通过建立可视化的方式进行数据的呈现。在使用技术的方式实现可视化之前&#xff0c;我们可以先和AI科技评论一起看看…

SpringBoot 源码分析准备应用上下文(2)-prepareContext

一、入口 /*** Run the Spring application, creating and refreshing a new* {link ApplicationContext}.* param args the application arguments (usually passed from a Java main method)* return a running {link ApplicationContext}*/public ConfigurableApplicationC…

生成测试报告,在Unittest框架中就是简单

测试套件&#xff08;Test Suite&#xff09;是测试用例、测试套件或两者的集合&#xff0c;用于组装一组要运行的测试&#xff08;多个测试用例集合在一起&#xff09;。 &#xff08;1&#xff09;创建一个测试套件&#xff1a; import unittest suite unittest.TestSuite…

车载测试:详解ADAS传感器(相机)标定数据采集方法

1.基本原理 相机外参标定&#xff0c;通过拍摄多角度棋盘格标定相机外参。 2.外参标定板设计 标定板分为垂直标定板和水平标定板&#xff0c;由于地面的水平标定板不容易被检测到&#xff0c;本文采用垂直标定板进行相机标定。 在标定过程中标定板需要和车身坐标成正交状态…

中国人民大学与加拿大女王大学金融硕士——所有的为时已晚都是恰逢其时

你是否有过同样的感觉&#xff0c;工作之余想学点什么又觉得有点晚了&#xff0c;心里反复纠结&#xff0c;总是没个结果。记得在网上看到过一句话&#xff0c;你觉得为时已晚的时候&#xff0c;恰恰是最早的时候。与其在心里反复琢磨&#xff0c;不如去付诸行动。中国人民大学…

超详细,自动化测试-Allure测试报告动态生成用例/标题(实战撸码)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 pytest 结合 allu…