假设一家书店的所有者开设了一家商店,以等待数分钟的客户列表条目。每分钟,都有一定数量的顾客(客户[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