-
类型:固定窗口
-
特点:维护变量和最终结果不是同一个
-
题目:今天,书店老板有一家店打算试营业 customers.length 分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一次。请你返回这一天营业下来,最多有多少客户能够感到满意。
-
思路: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
- 明日计划:开始学习二叉树