Python程式:查詢我們可以使最多的人快樂
假設我們有一個客戶列表customers和另一個情緒列表mood,這兩個列表長度相同,我們還有一個整數k。現在,在每一分鐘i,customers[i]數量的人來到商店,當mood[i] = 1時,表示顧客很高興,當mood[i] = 0時,表示他們不高興。我們可以將大小為k的mood子列表設定為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
- 對於範圍從0到n - 1的i,執行以下操作:
- a[i + 1] := a[i]
- 如果mood[i]不為零,則:
- s := s + customers[i]
- 否則:
- a[i + 1] := a[i + 1] + customers[i]
- d := 0
- 對於範圍從k到n的i,執行以下操作:
- 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
廣告