题目:
今天,书店老板有一家店打算试营业 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