LeetCode每日题解(0324)

感谢参考原文-http://bjbsair.com/2020-03-27/tech-info/7094.html

一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。  
  
注意:本题相对原题稍作改动  
  
示例 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每日一题题解(0324)

今天又是一个Easy的题目,这是我们常见的一种套路。给你一个序列,然后pick若干个数,求最大或者最小值。只求最优解不求具体解的,很多时候都是可以用动态规划进行解决。

动态规划问题首先要满足无后效性,如果我们从左往右处理,每一个元素是否选择只会影响到下一个元素能否选择,所以满足无后效性。动态规划的另外1个就是状态表示了,我们可以我们用F[i]表示前i个的最优解是多少,但是因为我们不知道i-1个是否被选择,所以我们很难处理第i个。因为仅用f[i]是没办法表示第i个时间段是否选择。所以我们新增一个维度,f[i][0]表示第i个没有选择的最优解,f[i][1]表示第i个时间段选择的最优解。很显然,f[i][1]必然是从f[i-1][0]转化而来。

接下来就是代码了。

LeetCode每日一题题解(0324)

这里讲一个题外话,我们去面试的时候,通常面试官是没有讲数据范围与边界条件的。这个时候最好在你写代码之前能向面试官询问,表示你已经考虑到了这些边界情况。在我们日常的开发过程中,也是存在非常多的边界情况,提前处理能够表现你这个人考虑问题周全细致,是一个加分项。向这个题目中,如果给的序列是空的,那么返回0即可。

最后,能不能更节省内存地完成这个问题呢?如果你知道,欢迎留言。感谢参考原文-http://bjbsair.com/2020-03-27/tech-info/7094/

一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。  
  
注意:本题相对原题稍作改动  
  
示例 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每日一题题解(0324)

今天又是一个Easy的题目,这是我们常见的一种套路。给你一个序列,然后pick若干个数,求最大或者最小值。只求最优解不求具体解的,很多时候都是可以用动态规划进行解决。

动态规划问题首先要满足无后效性,如果我们从左往右处理,每一个元素是否选择只会影响到下一个元素能否选择,所以满足无后效性。动态规划的另外1个就是状态表示了,我们可以我们用F[i]表示前i个的最优解是多少,但是因为我们不知道i-1个是否被选择,所以我们很难处理第i个。因为仅用f[i]是没办法表示第i个时间段是否选择。所以我们新增一个维度,f[i][0]表示第i个没有选择的最优解,f[i][1]表示第i个时间段选择的最优解。很显然,f[i][1]必然是从f[i-1][0]转化而来。

接下来就是代码了。

LeetCode每日一题题解(0324)

这里讲一个题外话,我们去面试的时候,通常面试官是没有讲数据范围与边界条件的。这个时候最好在你写代码之前能向面试官询问,表示你已经考虑到了这些边界情况。在我们日常的开发过程中,也是存在非常多的边界情况,提前处理能够表现你这个人考虑问题周全细致,是一个加分项。向这个题目中,如果给的序列是空的,那么返回0即可。

最后,能不能更节省内存地完成这个问题呢?如果你知道,欢迎留言。

你可能感兴趣的:(LeetCode每日题解(0324))