題目描述 愛生氣的書店老板
今天井佑,書店老板有一家店打算試營業(yè) customers.length 分鐘。每分鐘都有一些顧客(customers[i])會進入書店守呜,所有這些顧客都會在那一分鐘結(jié)束后離開型酥。
在某些時候山憨,書店老板會生氣。 如果書店老板在第 i 分鐘生氣弥喉,那么 grumpy[i] = 1郁竟,否則 grumpy[i] = 0。 當(dāng)書店老板生氣時由境,那一分鐘的顧客就會不滿意棚亩,不生氣則他們是滿意的。
書店老板知道一個秘密技巧虏杰,能抑制自己的情緒讥蟆,可以讓自己連續(xù) X 分鐘不生氣,但卻只能使用一次纺阔。
請你返回這一天營業(yè)下來瘸彤,最多有多少客戶能夠感到滿意的數(shù)量。
示例
輸入:customers = [1,0,1,2,1,1,7,5], grumpy = [0,1,0,1,0,1,0,1], X = 3
輸出:16
解釋:
書店老板在最后 3 分鐘保持冷靜笛钝。
感到滿意的最大客戶數(shù)量 = 1 + 1 + 1 + 1 + 7 + 5 = 16.
解題思路
- 先計算所有老板沒有生氣時候的客氣
- 計算從0-X老板不生氣增加的客人數(shù)
- 開始滑動窗口质况,當(dāng)前是0-X,下一時候是1-X+1,計算i-i+X窗口內(nèi)老板不生氣增加的客人數(shù)玻靡,并且記錄最大值
代碼
class Solution {
public:
int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int X) {
int res=0;
int maxx = 0;
for(int i=0;i<customers.size();i++){
res += customers[i] * (1-grumpy[i]);
}
for(int i=0;i<X;i++){
maxx += customers[i] * grumpy[i];
}
int last = maxx;
for(int i=X;i<customers.size();i++){
int right = customers[i] * grumpy[i];
int left = customers[i-X] * grumpy[i-X];
last = right - left + last;
maxx = max(maxx, last);
}
return maxx + res;
}
};