社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

leetcode每日一题 python解法 3月24日

Never肥宅 • 5 年前 • 273 次点击  

难度:简单

题目内容:

一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。

注意:本题相对原题稍作改动

示例 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。

题解:

根据题意,我们肯定是预约尽可能多的时间长的,但是两个预约直接的间隔只可能为一个(必须有间隔)或者两个(如果三个的话就可以插入一个预约了,增长时间),那么比如我们已经计算到第n位的话,由于要不要接受第n+2位的时候,只需要比较接受n+2位的序列结果大还是不接受的结果大即可。
所以每次循环都比较上上次的运算结果加上这个数与当前值哪个大,如果上上次的加上这个数大那自然就取这个,如果不是的话,说明我们现在的策略是理性的放弃了一个预约,并且取得了更好的效果。

image.png
class Solution:
    def massage(self, nums):
        r = 0
        last = 0
        for num in nums:
            t = r
            r = max(last + num,r)
            last = t
        return r
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56704
 
273 次点击