Python 中的暴躁书店老板
假设一位书店老板开店一段时间(以客户列表条目分钟数表示)。每分钟,都会有若干顾客(customers[i])进入商店,然后在该分钟结束时离开。在某些分钟,老板脾气暴躁。现在,如果老板在第 i 分钟脾气暴躁,则 grumpy[i] = 1,否则 grumpy[i] = 0。当书店老板脾气暴躁时,该分钟的顾客不开心,否则他们很开心。书店老板知道一种方法可以让自己连续 X 分钟不发脾气。这种方法不能使用超过一次。我们必须找到一天中可以开心的顾客的最大数量。因此,如果输入类似于:customers = [1,0,1,2,1,1,7,5] 和 grumpy = [0,1,0,1,0,1] 以及 X = 3,则输出将为 16。这是因为老板在最后三分钟不会让自己发脾气。因此,最开心的顾客数量为 1 + 1 + 1 + 1 + 7 + 5 = 16
为了解决这个问题,我们将遵循以下步骤:
设置 i := 0,j := 0,sums := 空列表,temp := 0
当 j – i + 1 < X 时
如果 grumpy[j] 为 1,则 temp := temp + customers[j]
将 j 增加 1
将列表 [temp, i, j] 插入 sums 数组中
将 i 和 j 增加 1
当 j < 客户列表的长度时
如果 grumpy[i - 1] 为 1,则 temp := temp – customers[i - 1]
如果 grumpy[j] 为 1,则 temp := temp + customer[j]
将列表 [temp, i, j] 插入 sums 数组中
将 i 和 j 增加 1
sums := 基于内部列表的第一个元素对 sums 数组进行排序
index1 := sums 中最后一个列表的第二个元素,index2 := sums 中最后一个列表的第三个元素,
对于 index1 到 index2 范围内的 i,设置 grumpy[i] := 0
ans := 0
对于 0 到 customers 长度范围内的 i
如果 grumpy[i] 为 0,则 ans := ans + customers[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
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP