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

  • 类型:固定窗口

  • 特点:维护变量和最终结果不是同一个

  • 题目:今天,书店老板有一家店打算试营业 customers.length 分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一次。请你返回这一天营业下来,最多有多少客户能够感到满意。

  • 参考题解:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/yi-ge-mo-ban-miao-sha-10dao-zhong-deng-n-sb0x/

  • 思路:01-要使抑制的效益最高,则抑制窗口中包含的生气人数应该最多,所以本体首先要找到生气人数最多的固定窗口,同时记录下窗口起始点;02-在最佳窗口下,计算结果。

  • 经验:(1)窗口起始点随count变大而更新,而不是随遍历而更新,因此需要加if判断。(2)本题需要遍历两次,第一次找到最好的窗口并记录下窗口的起始点;第二次找到包含最好窗口的结果。

def maxSatisfied(self, customers: List[int], grumpy: List[int], minutes: int) -> int:
   count,max_count,max_left,res=0,0,0,0 #维护,统计不满意的人
   left=0
   #移动right,更新维护
   for right in range(len(customers)):
       if grumpy[right]==1:count+=customers[right]
       
       #固定长度,right不动,更新left
       if right-left+1==minutes:
           if count>max_count:
               max_count = count
               max_left = left
           if grumpy[left]==1:count-=customers[left] #把不满意的删了
           left+=1
   #找到符合要求的窗口后,输出结果
   for j in range(max_left,max_left+minutes):
       grumpy[j]=0
   for k in range(len(customers)):
       if grumpy[k]==0:res+=customers[k] 
   return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值