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

更新於:2021年10月14日

453 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告