LeetCode-面试题 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。
方法一:动态规划
思路和算法
class Solution {
public:int massage(vector<int>& nums) {int n = nums.size();int dp0 = 0; //dp0 代表 dp[i][0]int dp1 = nums[0]; //dp1 代表 dp[i][1]for (int i=1; i<n; i++){int current_dp0 = max(dp0, dp1); // 计算 dp[i][0]int current_dp1 = dp0 + nums[i]; // 计算 dp[i][1]dp0 = current_dp0; // 用 dp[i][0] 更新 dp_0dp1 = current_dp1; // 用 dp[i][1] 更新 dp_1}return max(dp0, dp1);}
};
复杂度分析
时间复杂度:O(n)O(n),其中 nn 为预约的个数。我们有 2n2n 个状态需要计算,每次状态转移需要 O(1)O(1) 的时间,所以一共需要 O(2n)=O(n)O(2n)=O(n) 的时间复杂度。
空间复杂度:O(1)O(1),只需要常数的空间存放若干变量。
LeetCode-面试题 17.16:按摩师相关推荐
- LeetCode 面试题 17.16. 按摩师
面试题 17.16. 按摩师 题目:一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接.在每次预约服务之间要有休息时间,因此她不能接受相邻的预约.给定一个预约请求序列,替按摩师找到最 ...
- 面试题 17.16. 按摩师
面试题 17.16. 按摩师 思路:递归只有选和不选两种选择.用数组存储已计算过的值. class Solution { public:int massage(vector<int>&am ...
- 面试题 17.16. 按摩师(简单题)
题目描述: 一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接.在每次预约服务之间要有休息时间,因此她不能接受相邻的预约.给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间 ...
- leetcode 面试题 17.14. 最小K个数 大顶堆 小顶堆 快排
leetcode 面试题 17.14. 最小K个数 [难度:中等] 设计一个算法,找出数组中最小的k个数.以任意顺序返回这k个数均可. 示例: 输入: arr = [1,3,5,7,2,4,6,8], ...
- [leetcode 面试题 17.17] -- 多次搜索,KMP与字典树
[leetcode 面试题 17.17] -- 多次搜索 题目来源 分析 KMP思路 完整代码 字典树 完整代码 题目来源 https://leetcode-cn.com/problems/multi ...
- ⭐算法入门⭐《堆》中等01 —— LeetCode 面试题 17.09. 第 k 个数
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 有些数的素因子只有 3 ...
- 程序员面试金典 - 面试题 17.16. 理发师(动态规划DP)
1. 题目 一个有名的理发师会收到源源不断的预约请求,每个预约都可以选择接或不接.在每次预约服务之间要有休息时间,因此她不能接受相邻的预约.给定一个预约请求序列,替理发师找到最优的预约集合(总预约时间 ...
- leetcode —— 面试题 17.12. BiNode
二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点).实现一个方法,把二叉搜索树转换为单向链表,要求值的顺序保持不变,转换操作应是原址的,也就是在原始的二叉 ...
- leetcode —— 面试题 17.08. 马戏团人塔
有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点.已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人. 示例: ...
最新文章
- TMS Scripter importtool的使用
- ASA防火墙学习笔记1-基础篇
- python开发是做什么的-python开发工程师是做什么的
- web页面事件无响应,元素点击不到
- SAP的程序用客户端连接正常,用C#连接死活连不上问题的解决
- .tex类型文件怎么阅读_Python用于NLP :处理文本和PDF文件
- 一篇文章彻底说清JS的深拷贝/浅拷贝
- php获得可靠的精准的当前时间 ( 通过授时服务器 )
- python编写es脚本_Elasticsearch 参考指南(如何使用脚本)
- Effective C# 原则42:使用特性进行简单的反射(译)
- 同源时钟/同步时钟/异步时钟/同源时钟之间时序约束/clk group
- “食物链”的顶端合约ALOKEX 顺势而行一万年太久只争朝夕
- 360插件化Replugin爬坑之路
- 毕业设计-基于机器视觉的车型识别系统
- jbox弹窗_强大的jquery弹出层插件jBox
- 【关键字】ddx ddy 导数函数
- grep命令详解(如何匹配多个字符串)(grep指令)(grep -q)
- 软件工程Alpha冲刺day6
- o7_dictionary_accessibility 参数
- mac nginx 非brew安装_Mac 安装 nginx