每日一题20201130(面试题 17.16. 按摩师)

面试题 17.16. 按摩师

image-20201130194133134

思路

典型的动态规划题目,存在多个子问题。这题与打家劫舍一模一样

这边我们设f(n)为接纳前N个客户的时长, a为预约数组

当n = 0的时候,显然f(n) = 0

当n = 1的时候,显然f(n) = a[n]

当n >= 2的时候,f(n) = max(f(n-2) + a[n], f(n-1))

分2种情况,接纳第n个客户的话,那么就不能接相邻的客户a[n-1]了,所以总数为f(n-2) + a[n]

如果不接纳第n个客户,那么总数就和f(n-1)一样了。我们是为了求最大的解,所以要取2者的最大值。
// 这不就是打家劫舍吗?

func massage(nums []int) int {
    // 假设她不接第n个人
    // n == 1 f(n) = a[n]
    // n == 2 f(n) = max(a[n], a[n-1])
    // f(n) = max(f(n-1), f(n-2)+a[n])
    if len(nums) == 0 {
        return 0
    }
    first, second := 0, nums[0]
    for i:=1;i<len(nums);i++ {
        first, second = second, max(first+nums[i], second)
    }
    return second
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

image-20201130194020286

class Solution:
    def massage(self, nums: List[int]) -> int:
        if len(nums) == 0:
            return 0
        first, second = 0, nums[0]
        for n in nums[1:]:
            first, second = second, max(first+n, second)
        return second

image-20201130194844069

本文作者:米洛丶

本文链接:https://www.cnblogs.com/we8fans/p/14063214.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   米洛丶  阅读(114)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起