[每日一题系列]第五天——按摩师【动态规划】


资料链接(写的很好,推荐看一看):
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];
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值