「每日LeetCode」2020年12月16日
本文最后更新于:2023年3月19日 晚上
面试题 17.16. 按摩师
面试题 17.16. 按摩师
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。
注意:本题相对原题稍作改动
示例 1:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
思路
同198. 打家劫舍。
动态规划题:
- 当没有订单时,返回 0
- 当只有一个订单时,返回当前订单时间
- 当有两个订单时,返回时间长的订单时间
- 当大于两个订单时,当为第 k 个时:
- 如果当前单接,时间为当前单时间加上 k-2 个前的最长时间
- 如果当前单不接,时间为 k-1 个前最长的时间
得到的递推公式为dp[i]=max(dp[i−2]+nums[i],dp[i−1])
。
可以看到只和当前数的前两个数有关,可以省去 dp 的数组空间。使用 first 和 second 分别记录第 k-2 个数和第 k-1 个数,计算完max(second,first+num)
后,将 first 设为 second,second 设为较大的那一方。
解答
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!