资料链接(写的很好,推荐看一看):
https://www.zhihu.com/question/23995189
题目描述
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/the-masseuse-lcci
我的思路
一开始看到这道题,要求最优解,我就想到了动态规划,但是因为本人比较菜,还不太会动态规划,所以就在网上找了讲解动态规划思想的文章,发现了一篇讲得很好很清晰的文章,链接在本文最开始已经给出了。总结来说,动态规划就是为了解决这个问题,我们将它分解为几个小问题,并且分解出来的小问题也能够再次进行相同的分解得出解答。
对于按摩师这道题来说,我本人的想法是,如果给出的序列只有一个元素,那么解就是这个元素本身,如果有两个元素,因为不能接受相邻的预约,所以是在这两个元素中间选取较大的那一个,对于多个元素,
到这一步就已经找到了它的递推公式,可以进行代码编写
我的代码
public int massage(int[] nums) {
if(nums.length == 0) return 0;
int[] record = new int[nums.length];
for(int i =nums.length-1;i>=0;i--){
if(i == nums.length-1){
record[i] = nums[i];
}
else if(i == nums.length-1-1){
record[i] = Math.max(nums[i],record[i+1]);
}
else{
record[i] = Math.max(nums[i]+record[i+2],record[i+1]);
}
}
return record[0];
}