脾气暴躁的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