在Python中查找最大可使人们快乐的数量的程序

在Python中查找最大可使人们快乐的数量的程序

假设我们有一个顾客列表和另一个情绪列表,这两个列表长度相同,我们还有另一个整数k。现在在每分钟i,有customers[i]个人来到商店,当mood[i] = 1时,表示顾客们很高兴,当mood[i] = 0时,他们就会感到难过。我们可以将大小为k的情绪子列表设置为1,最后我们要找到我们可以使快乐的最大人数。

因此,如果输入是customers = [2,3,6,6,3] mood = [1,1,0,0,0] k = 2,那么输出将是17,因为如果我们将mood[2]和mood[3]设置为1,则总情绪值将是2 + 3 + 6 + 6 = 17顾客高兴。

为了解决这个问题,我们将遵循以下步骤-

  • n:mood的大小
  • a:大小为(n + 1)的列表,填充为0
  • s:0
  • 对于i从0到n-1,执行以下操作
    • a[i + 1]:= a[i]
    • 如果mood[i]不为零,则
      • s:= s + customers[i]
    • 否则,
      • a[i + 1]:= a[i + 1] + customers[i]
  • d:0
  • 对于i从k到n,执行以下操作
    • d:= d和(a[i] – a[i-k])的最大值
  • 返回s + d

例子

让我们看看以下实现,以便更好地理解

def solve(customers, mood, k):
   n = len(mood)
   a = [0] * (n + 1)
   s = 0
   for i in range(n):
      a[i + 1] = a[i]
      if mood[i]:
         s += customers[i]
      else:
         a[i + 1] += customers[i]
   d = 0
   for i in range(k, n + 1):
      d = max(d, a[i] - a[i - k])
   return s + d

customers = [2, 3, 6, 6, 3]
mood = [1, 1, 0, 0, 0]
k = 2
print(solve(customers, mood, k))

输入

[2, 3, 6, 6, 3],[1,1,0,0,0],2

输出

17

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程