題目連結:
題目意譯:
現在有一位書店店長開了 n 分鐘的店。每一分鐘,若干位顧客會進入書店。你被給定一個長度為 n 整數陣列 customers,其中 customers[i] 為在第 i 分鐘時進入店舖的顧客數量,而這些顧客在同一分鐘的結尾後將會離開店舖。
在某些時刻,書店店長會變得脾氣暴躁。你被給定一個二元陣列 grumpy,其中如果在第 i 分鐘時店長是暴躁的,則 grumpy[i] 是 1;反之,則 grumpy[i] 為 0。
當店長暴躁的時候,在該分鐘進入商店的顧客們將會很不滿意;反之,則他們將會相當滿意。
店長有一個密技來使自己在連續 minutes 分鐘內變得不會暴躁,不過這個密技只能使用一次。
回傳這一整天最大的滿意顧客之數量。
限制:
n == customers.length == grumpy.length
1 ≦ minutes ≦ n ≦ 2 × 10 ^ 4
0 ≦ customers[i] ≦ 1000
grumpy[i] 只會是 0 或是 1。
範例測資:
範例 1:
輸入: customers = [1,0,1,2,1,1,7,5], grumpy = [0,1,0,1,0,1,0,1], minutes = 3
輸出: 16
解釋: 書店店長在最後 3 分鐘讓自己不暴躁。
最大的滿意顧客數 = 1 + 1 + 1 + 1 + 7 + 5 = 16。
範例 2:
輸入: customers = [1], grumpy = [0], minutes = 1
輸出: 1
解題思維:
可以看到我們想要在任意長度為 minutes 的區間中找到不滿意的顧客最多者,來最大化總體滿意顧客數。
首先計算出前綴和(Prefix Sums,參見
這題)來快速地得出任意區間的總和。這邊我們想要計算的是「不滿意」的顧客之數量的前綴和。
接著窮舉所有可能的長度為 minutes 之區間並找出何者最大(若有多個,則隨便?。?。
令上述過程找到的最大值為 M,再令原先總計不滿意顧客數為 U 以及原先總計滿意顧客數為 S。則所求即為 S - U + M。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。