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

简介: 面试题 17.16. 按摩师

面试题 17.16. 按摩师


13.jpg

思路



典型的动态规划题目,存在多个子问题。这题与打家劫舍一模一样
这边我们设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
}

15.jpg

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

16.jpg

image-20201130194844069



相关文章
|
11月前
|
存储
Leecode 面试题 17.16. 按摩师
Leecode 面试题 17.16. 按摩师
43 0
|
5天前
|
存储 Java
面试官:素有Java锁王称号的‘StampedLock’你知道吗?我:这什么鬼?
面试官:素有Java锁王称号的‘StampedLock’你知道吗?我:这什么鬼?
46 24
|
4天前
|
Java 程序员
Java this关键字详解(3种用法),Java程序员面试必备的知识点
Java this关键字详解(3种用法),Java程序员面试必备的知识点
|
4天前
|
缓存 安全 Java
7张图带你轻松理解Java 线程安全,java缓存机制面试
7张图带你轻松理解Java 线程安全,java缓存机制面试
|
3天前
|
移动开发 前端开发 JavaScript
Java和web前端,IT新人该如何选择?,2024年最新Web前端内存优化面试
Java和web前端,IT新人该如何选择?,2024年最新Web前端内存优化面试
|
3天前
|
安全 Java 数据库
Spring boot 入门教程-Oauth2,java面试基础题核心
Spring boot 入门教程-Oauth2,java面试基础题核心
|
3天前
|
Java
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
|
4天前
|
存储 网络协议 前端开发
es集群安装,邮储银行java面试
es集群安装,邮储银行java面试
|
4天前
|
消息中间件 JSON Java
十五,java高级程序员面试宝典
十五,java高级程序员面试宝典
|
4天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf