leetcode:1052. 爱生气的书店老板(python版)

本文介绍了一个问题,如何通过编程解决书店老板的生气情况,即在给定grumpy数组表示老板的心情和customers数组表示顾客流量时,使用滑动窗口技巧动态计算在老板连续生气(minutes)分钟期间,不生气时的最大顾客满意度。作者给出了Python代码实现这一解决方案。
摘要由CSDN通过智能技术生成

链接:1052. 爱生气的书店老板

1.题目解析:

题目中给出minutes,用这个去将grumpy数组中的值连续的变成0在对

customers的值进行求和,那么我们只要用滑动窗口动态记录最大值就可以了

2.何如动态记录最大值:

既然是连续的将grumpy中的1变成0,那么原本的0所对应的customers求和的值就不用变

定义一个变量sum1来记录0所对应的和,在定义一个sum2来记录在连续区间minutes中1所对应的和,在用滑动窗口来跟新sum2的值,因为sum2是动态的,那么我们在定义一个变量max_sum2来记录在整个过程中sum2的最大值,最后将0所对应的和sum1+连续区间内将1变成0所对应最大值max_sum2就是答案了

3.具体代码:

class Solution:
    def maxSatisfied(self, customers: List[int], grumpy: List[int], minutes: int) -> int:
        sum1,sum2=0,0
        max_sum2=0
        for i in range(len(grumpy)):
            if grumpy[i]:    # 当grumpy中的值为1时加入sum2,反之加到sum1
                sum2+=customers[i]
            else:
                sum1+=customers[i]
            if i<minutes-1:   # 当滑动空间不够时,跳过
                continue
            max_sum2=max(max_sum2,sum2)  # 更新连续的将1变成0后的和最大值
            if grumpy[i-minutes+1]:  # 当能够滑动的时候更新sum2的值
                sum2-=customers[i-minutes+1]
        return sum1+max_sum2
            

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值