• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Niro Einteson
文可提笔安天下 武可上马定乾坤
博客园    首页    新随笔    联系   管理    订阅  订阅

面试题 17.16. 按摩师

面试题 17.16. 按摩师

一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。

注意:本题相对原题稍作改动

 

示例 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。

 

 1  class Solution {
 2 public:
 3     int massage(vector<int>& nums) {
 4         if(nums.size()==0) return 0;
 5         else if(nums.size()==1) return nums[0];
 6         else if(nums.size()==2) return max(nums[0],nums[1]);
 7         vector<int> dp(nums.size()+1);
 8         dp[0]=nums[0];
 9         dp[1]=max(nums[0],nums[1]);
10         for(int i=2;i<nums.size();i++){//dp[i] 代表 预约到第i个预约的时候,所能预约的最长时间
11             dp[i]=max(dp[i-1],dp[i-2]+nums[i]);//相邻预约不能取,那么就是 前i-2个预约最长时间+i的预约时间 和 i-1预约的 最长时间 相比较 ,更新最长时间
12         }
13         return dp[nums.size()-1];
14     }
15 };

 

posted @ 2020-04-14 21:31  Nirogo  阅读(337)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3