美文网首页
(面试题 17.16)按摩师

(面试题 17.16)按摩师

作者: 等不了天明等时光 | 来源:发表于2020-03-25 22:03 被阅读0次

解题思路

动态规划:
定义 dp[i][0] 表示第i个预约不接,dp[i][1]表示第i个预约接。根据题意,相邻的预约不能接。
因此当第i个预约不接时,第i-1个预约接不接都可以,则 dp[i][0] = max(dp[i-1][0], dp[i-1][1]);而当第i个预约接受的时候,第i-1个预约不能接,则dp[i][1] = dp[i-1][0]+nums[i],最后返回max(dp[n][0], dp[n][1])即可。
复杂度分析:
时间复杂度:O(n),其中 n 为预约的个数。我们有 2n 个状态需要计算,每次状态转移需要 O(1) 的时间,所以一共需要 O(2n)=O(n) 的时间复杂度。
空间复杂度:O(1),只需要常数的空间存放若干变量。

代码

class Solution:
    def massage(self, nums: List[int]) -> int:
        n = len(nums)
        if n == 0:
            return 0
        dp0 = 0 # 第一个预约不接
        dp1 = nums[0] # 第一个预约接
        for i in range(1, n): # 从第二个预约开始
            tdp0 = max(dp0, dp1) # 第i个预约不接,那么第i-1个预约可以接,也可以不接,取最大值
            tdp1 = dp0 + nums[i] # 第i个预约接,那么第i-1个预约不可以接
            dp0 = tdp0
            dp1 = tdp1
        return max(dp0, dp1)

相关文章

网友评论

      本文标题:(面试题 17.16)按摩师

      本文链接:https://www.haomeiwen.com/subject/bydfuhtx.html