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