在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