leetcode 1052 愛生氣的書店老闆

2021-10-19 20:56:10 字數 1870 閱讀 4704

目錄

一、題目內容

二、解題思路

三、**

今天,書店老闆有一家店打算試營業 customers.length 分鐘。每分鐘都有一些顧客(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,0,1], x = 3

輸出:16

解釋:書店老闆在最後 3 分鐘保持冷靜。

感到滿意的最大客戶數量 = 1 + 1 + 1 + 1 + 7 + 5 = 16.

1 <= x <= customers.length == grumpy.length <= 20000

0 <= customers[i] <= 1000

0 <= grumpy[i] <= 1

滑動視窗,沒啥說的,先累加能獲得的所有滿意度,然後再計算滑動視窗中能獲得的滿意度,每次需要記錄最大值,最後返回二者之和即可。

class solution:

def maxsatisfied(self, customers: list, grumpy: list, x: int) -> int:

origin = 0

for i in range(len(customers)):

if grumpy[i] == 0:

origin += customers[i]

# print(origin)

windows = 0

for i in range(x):

if grumpy[i] == 1:

windows += customers[i]

# print(windows)

left = 0

right = x - 1

dynamic = windows

while right < len(customers) - 1:

if grumpy[left] == 1:

dynamic -= customers[left]

if grumpy[right + 1] == 1:

dynamic += customers[right + 1]

left += 1

right += 1

windows = max(windows, dynamic)

return origin + windows

if __name__ == '__main__':

s = solution()

customers = [1, 0, 1, 2, 1, 1, 7, 5]

grumpy = [0, 1, 0, 1, 0, 1, 0, 1]

x = 3

ans = s.maxsatisfied(customers, grumpy, x)

print(ans)

leetcode1052愛生氣的書店老闆

滑動視窗第三天今天,書店老闆有一家店打算試營業 customers.length 分鐘。每分鐘都有一些顧客 customers i 會進入書店,所有這些顧客都會在那一分鐘結束後離開。在某些時候,書店老闆會生氣。如果書店老闆在第 i 分鐘生氣,那麼 grumpy i 1,否則 grumpy i 0。當...

LeetCode 1052 愛生氣的書店老闆

今天,書店老闆有一家店打算試營業 customers.length 分鐘。每分鐘都有一些顧客 customers i 會進入書店,所有這些顧客都會在那一分鐘結束後離開。在某些時候,書店老闆會生氣。如果書店老闆在第 i 分鐘生氣,那麼 grumpy i 1,否則 grumpy i 0。當書店老闆生氣時...

LeetCode1052 愛生氣的書店老闆

今天,書店老闆有一家店打算試營業 customers.length 分鐘。每分鐘都有一些顧客 customers i 會進入書店,所有這些顧客都會在那一分鐘結束後離開。在某些時候,書店老闆會生氣。如果書店老闆在第 i 分鐘生氣,那麼 grumpy i 1,否則 grumpy i 0。當書店老闆生氣時...