leetcode 签到 面试题 17.16. 按摩师 动态规划
2024-10-08 22:47:48
题目:
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。
注意:本题相对原题稍作改动
示例 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.com/problems/the-masseuse-lcci
思路
这个题目跟前几天的几乎一模一样。
简单的动态规划问题,公式;
dp[i]=max(dp[i-2]+num[i],dp[i-1])
问题分为最后选择了第i个或者没有选择第i个。
dp[i]是前i个房间里的最优解,若选择了第i个,则答案就是第i个加dp[i-2](i-2)的最优解
代码:
class Solution:
def massage(self, nums):
if len(nums)==0:
return 0
if len(nums) == 1:
return nums[0]
dp={}
dp[0]=nums[0]
dp[1]=max(nums[0],nums[1])
for i in range(2,len(nums)):
dp[i]=max(dp[i-2]+nums[i],dp[i-1])
return dp[len(nums)-1]
a=Solution()
nums=[]
print(a.massage(nums))
官方代码:
class Solution:
def massage(self, nums: List[int]) -> int:
n = len(nums)
if n == 0:
return 0
dp0, dp1 = 0, nums[0]
for i in range(1, n):
tdp0 = max(dp0, dp1) # 计算 dp[i][0]
tdp1 = dp0 + nums[i] # 计算 dp[i][1]
dp0, dp1 = tdp0, tdp1
return max(dp0, dp1)
链接:https://leetcode-cn.com/problems/the-masseuse-lcci/solution/an-mo-shi-by-leetcode-solution/
来源:力扣(LeetCode)
最新文章
- Oracle job procedure 存储过程定时任务
- UIView的响应链
- Python中With的用法
- ubuntu 14.04解决gedit中文乱码的问题
- 闲扯 Javascript 04 滚动条
- uva 10603
- UPX 加壳工具:The Ultimate Packer for eXecutables
- 【转】TCP、UDP、RTP(RTCP)区别
- Web项目发布的更新
- 标准I/O的缓冲
- [原]Django(1)----Django-setting中的STATIC_URL 和STATIC_ROOT 和STATICFILES_DIRS 的区别
- [Java in NetBeans] Lesson 12. Arrays
- WPF LinkButton
- 自定义cnblogs样式小结
- CentOS 7 目录布局变化
- chrome 设置是否缓存
- 【Codechef】Random Number Generator(多项式除法)
- java多态抽象类实例
- IBM AppScan 安全漏洞问题修复(.net)
- hdu6237 分解质因子