摘要:
动态规划问题。
题目:
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。
给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。
注意:本题相对原题稍作改动
示例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 { |
- 时间复杂度:$O(N)$,$N$ 是数组的长度;
- 空间复杂度:$O(N)$,状态数组的大小为 $N$
一维状态数组 +「滚动数组」
使用 $3$ 个变量滚动完成计算,将空间优化到常数级别。
1 | class SolutionSO1 { |
- 时间复杂度:$O(N)$,$N$ 是数组的长度;
- 空间复杂度:$O(1)$,状态数组的大小为 $3$,常数空间。
原题链接: LeetCode 6. 按摩师