面试题 17.16. 按摩师

解题博客:按摩师的预约问题

题目描述

在一个按摩师的工作日中,她会收到源源不断的预约请求,每个请求都有一个特定的时长。每个预约之间必须有一个休息时间,因此她不能接受相邻的预约。目标是,在所有预约中,选择若干个预约,使得总的预约时间最大。我们需要根据给定的预约时长序列,找到一个最佳的预约组合,并返回总的时长。

问题理解

  • 每个预约都有一个时长。
  • 若选择一个预约,接下来的预约必须跳过一个,否则就会与已选择的预约冲突。
  • 我们需要在所有预约中选择若干个,使得选择的预约总时长最大。

例如,给定一个预约请求时长序列 [30, 15, 60, 75, 45, 15, 15, 45],按摩师可以选择一组预约,使得这些预约的总时长最大。

解题思路

这个问题可以被视作一个典型的动态规划问题,类似于 “打家劫舍(House Robber)” 问题。由于每个预约必须间隔一个时段,我们不能简单地选择连续的请求。因此,需要动态规划来寻找最优解。

动态规划状态

我们定义一个数组 dp[i] 来表示考虑前 i 个预约时能够获得的最大总时长。

  • dp[i] 既可以由不选择第 i 个预约得到:dp[i-1]
  • 也可以由选择第 i 个预约得到:dp[i-2] + nums[i],因为如
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值