脾气暴躁的Python书店老板
假设一家书店的所有者开设了一家商店,以等待数分钟的客户列表条目。每分钟,都有一定数量的顾客(客户[i])进入商店,然后所有顾客在那分钟结束后离开。几分钟后,店主脾气暴躁。现在,如果所有者在第i分钟脾气暴躁,则grumpy[i]=1,否则grumpy[i]=0。当书店所有者脾气暴躁时,那一分钟的顾客会感到不高兴,否则他们会感到高兴。书店老板知道一种技巧,可以使自己连续X分钟保持脾气暴躁。该技术不能被多次使用。我们必须找到一整天可以满足的最大客户数量。因此,如果输入是这样的:customers=[1,0,1,2,1,1,7,5]且脾气暴躁=[0,1,0,1,0,1]且X=3,则输出将是16。这是因为所有者在最后三分钟内不会脾气暴躁。因此,满意客户的最大数量为1+1+1+1+7+5=16
为了解决这个问题,我们将遵循以下步骤-
设置i:=0,j:=0,和:=空列表和temp:=0
而j–i+1<X
如果脾气暴躁[j]为1,则temp:=temp+客户[j]
将j增加1
将列表[temp,i,j]插入sums数组
将i和j加1
而j<客户列表的长度
如果脾气暴躁[i-1]为1,则temp:=temp–客户[i-1]
如果脾气暴躁[j]为1,则temp:=temp+customer[j]
将列表[temp,i,j]插入sums数组
将i和j加1
sums:=基于内部列表的第一个元素对sums数组进行排序
index1:=总和中最后一个列表的第二个元素,index2:=总和中最后一个列表的第三个元素,
对于范围在index1到index2中的i,设置grumpy[i]:=0
回答:=0
对于范围在0到客户长度范围内的i
如果grumpy[i]为0,则ans:=ans+客户[i]
返回ans
让我们看下面的实现以更好地理解-
示例
class Solution(object):
def maxSatisfied(self, customers, grumpy, X):
i = 0
j = 0
sums = []
temp = 0
while j-i+1<X:
if grumpy[j]:
temp+=customers[j]
j+=1
sums.append([temp,i,j])
i+=1
j+=1
while j<len(customers):
if grumpy[i-1]:
temp-=customers[i-1]
if grumpy[j]:
temp+=customers[j]
sums.append([temp,i,j])
i+=1
j+=1
sums =sorted(sums,key = lambda v : v[0])
index1 = sums[-1][1]
index2 = sums[-1][2]
for i in range(index1,index2+1):
grumpy[i] = 0
ans = 0
for i in range(len(customers)):
if not grumpy[i]:
ans+=customers[i]
return ans
ob = Solution()print(ob.maxSatisfied([1,0,1,2,1,1,7,5],[0,1,0,1,0,1,0,1],3))输入项
[1,0,1,2,1,1,7,5] [0,1,0,1,0,1,0,1] 3
输出结果
16