leetcode每日一题—1052.爱生气的书店老板

461 篇文章 1 订阅
该篇博客探讨了一个关于书店经营的策略问题。店主在试营业期间,每分钟会有一定数量的顾客光顾,但书店老板在某些时刻会生气,导致顾客不满意。店主有一种技巧可以连续X分钟不生气,从而提高顾客满意度。文章通过滑动窗口算法求解了最大可能的满意顾客数量,实现了满意度的最大化。
摘要由CSDN通过智能技术生成

题目:
今天,书店老板有一家店打算试营业 customers.length 分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。
在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。
书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一次。
请你返回这一天营业下来,最多有多少客户能够感到满意的数量。
在这里插入图片描述
思路:
秘密技巧只影响 当前滑动窗口(大小为X) 内 感到不满意的顾客,即使当前滑动窗口内不满意的顾客 变为 满意的顾客。故可先求出 试营业时间内所有感到满意的顾客total。再利用滑动窗口计算被挽回(不满意->满意)的顾客,求出其最大值,与total累加即可得到最终结果。

解答:

class Solution:
    def maxSatisfied(self, customers: List[int], grumpy: List[int], X: int) -> int:
        n=len(customers)
        #total:试营业时间内感到满意的顾客数量
        total=0
        for i in range(n):
            total+=customers[i]*(1-grumpy[i])
        #curval:滑动窗口内 被挽留顾客的 初始值
        curval=0
        for i in range(X):
            curval+=customers[i]*grumpy[i]
        #res:最终结果
        res=curval
        for i in range(X,n):
            curval=curval+customers[i]*grumpy[i]-customers[i-X]*grumpy[i-X]
            res=max(res,curval)
        return total+res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值