Leetcode-面试题17.16.按摩师
@ 晚风 · Monday, Jun 29, 2020 · 1 分钟阅读 · 更新于 6月 29, 2020

动态规划

解题思路:

  • 1.判断nums的长度 0就返回0 1就返回第一个元素(因为我么得选择)
  • 2.创建一个列表dp=[0] * len(nums)
  • 3.dp的第一个元素等于nums的第一个元素,第二个元素等于nums的第一个元素与第二个元素的最大值
  • 4.从索引2开始循环nums
  • 5.两种选择:
    • 1.选择该预约 则dp[i] = dp[i-2] + nums[i] (若选择该预约等于i-2的最长时长+本次预约时长)
    • 2.不选择该预约 则dp[i] = dp[i-1] (不选择该预约则最长时长仍等于上一个预约的时长)
  • 6.返回dp最后一个元素(dp每个元素表示到该预约的最长时长)

talk is cheap,show my code:

class Solution(object):
    def massage(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if not nums:
            return 0
        elif len(nums) == 1:
            return nums[0]
        dp = [0] * len(nums)
        dp[0] = nums[0]
        dp[1] = max(nums[1], nums[0])
        for i in range(2, len(nums)):
            # 选择该预约 等于i-2的最长时长+本次预约时长
            A = dp[i - 2] + nums[i]
            # 不选择该预约,等于i-1的最长时长
            B = dp[i - 1]
            # 选择两种情况下的最长时长
            dp[i] = max(A, B)
        return dp[-1]

作者:hello_lwz
链接:https://leetcode-cn.com/problems/the-masseuse-lcci/solution/dong-tai-gui-hua-by-hello_lwz-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

关于我

❤️

姓名: lwz


性别: 男


年龄: 29


星座: 摩羯座


职业: python工程师


爱好: 秋、ps5、运动


主要的技术栈是:

  • python
  • 自动驾驶仿真验证

学习网站: leetcode


公司: 国科础石


– 2025 年 2 月 25 日更新

我的一些开源项目

等等?项目呢?不会没有吧??

其他

如果你喜欢我的开源项目或者它们可以给你带来帮助,可以赏一杯咖啡 ☕ 给我。~

It is better to attach some information or leave a message so that I can record the donation 📝, thank you very much 🙏.

社交链接