按摩师问题
问题描述:
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。
在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。
给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。
链接:https://leetcode-cn.com/problems/the-masseuse-lcci/
思路:
本次使用的解法是动态规划法。我对这个算法的简单理解是在递归解决相似子问题时,记录子问题的解。因为解决后面的子问题需要用到前一个子问题的解。
当数组nums为空数组时,说明无委托,此时时间为0,直接返回0即可
当nums中只有1个委托时,直接返回该委托所需要的时间即可
当nums中的委托>=2时,将存放子问题解的数组sta初始化后进行讨论:
委托=1,sta[1]=nums[1]
委托=2,sta[2]=max(nums[1],nums[2]),即在两个委托中选择时间长的一个
委托>2,sta[i]=max(sta[i-1],(sta[i-2]+num[i])),判断接不接第i个委托的哪个时间长,选择长的时间记录在sta[i]中
sta[i-1]:是指不接第i个委托的时间
sta[i-2]+nums[i]:是指接第i个委托,因为i和i-1的委托不能同时接,因此接第i-2个委托+第i个委托所需要的时间
代码:
以上,希望对各位有所帮助
200324 Rewivy