• 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即可。

    最后,能不能更节省内存地完成这个问题呢?如果你知道,欢迎留言。感谢参考原文-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即可。

    最后,能不能更节省内存地完成这个问题呢?如果你知道,欢迎留言。感谢参考原文-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即可。

    最后,能不能更节省内存地完成这个问题呢?如果你知道,欢迎留言。感谢参考原文-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即可。

    最后,能不能更节省内存地完成这个问题呢?如果你知道,欢迎留言。感谢参考原文-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即可。

    最后,能不能更节省内存地完成这个问题呢?如果你知道,欢迎留言。感谢参考原文-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即可。

    最后,能不能更节省内存地完成这个问题呢?如果你知道,欢迎留言。感谢参考原文-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即可。

    最后,能不能更节省内存地完成这个问题呢?如果你知道,欢迎留言。感谢参考原文-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即可。

    最后,能不能更节省内存地完成这个问题呢?如果你知道,欢迎留言。感谢参考原文-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即可。

    最后,能不能更节省内存地完成这个问题呢?如果你知道,欢迎留言。感谢参考原文-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即可。

    最后,能不能更节省内存地完成这个问题呢?如果你知道,欢迎留言。感谢参考原文-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即可。

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

  • 相关阅读:
    Hibernate与JPA的区别是什么
    11 吐司 Toast 代码案例
    万众瞩目之下,ANGULAR 2终于正式发布啦!
    Sencha EXTJS6的 Eclipse 插件安装指南
    安卓6.0新特性在Fragment申请运行时权限
    NDK环境配置
    18 UI美化之level(等级显示显示)
    ABAP SY-SUBRC 使用过程中返回值的几种含义
    SAP中给当前指定的活动用户发系统信息的函数
    SAP中的Currency Converting Factor
  • 原文地址:https://www.cnblogs.com/lihanlin/p/12582039.html
Copyright © 2020-2023  润新知