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

更新於:2020年5月2日

170 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.