本文主要是介绍爱生气的书店老板,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原题指路
爱生气的书店老板
题目描述
今天,书店老板有一家店打算试营业 customers.length
分钟。每分钟都有一些顾客(customers[i]
)会进入书店,所有这些顾客都会在那一分钟结束后离开。
在某些时候,书店老板会生气。 如果书店老板在第 i
分钟生气,那么 grumpy[i] = 1
,否则 grumpy[i] = 0
。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。
书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X
分钟不生气,但却只能使用一次。
请你返回这一天营业下来,最多有多少客户能够感到满意的数量。
解题思路
1、首先,求出在不使用秘密技巧时满意的顾客数 s a t = ∑ i = 0 n ( 1 − g r u m p y [ i ] ) × c u s t o m e r s [ i ] sat=\sum\limits_{i=0}^n{(1-grumpy[i])\times customers[i]} sat=i=0∑n(1−grumpy[i])×customers[i]。
2、采用滑动窗口法的思想来维护使用秘密技巧后所能增加的最大满意顾客数 e x t r a extra extra,则每次需要维护的窗口为 t m p i = ∑ j = i − X + 1 i g r u m p y [ j ] × c u s t o m e r s [ j ] tmp_{i}=\sum\limits_{j=i-X+1}^i{grumpy[j]\times customers[j]} tmpi=j=i−X+1∑igrumpy[j]×customers[j]。
时间复杂度:O(n)
空间复杂度:O(1)
代码
class Solution:def maxSatisfied(self, customers: List[int], grumpy: List[int], X: int) -> int:length=len(customers)l=r=sat=extra=tmp=0while r<length:#用sat来求出不使用秘密技巧时满意的顾客数sat+=(1-grumpy[r])*customers[r]#滑动窗口法求使用秘密技巧后所能增加的最大满意顾客数tmp+=grumpy[r]*customers[r]extra=max(extra,tmp)r+=1if r-l==X :tmp -= grumpy[l] * customers[l]l+=1return sat+extra
这篇关于爱生气的书店老板的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!