我们只能改变一段区间里面老板由生气到不生气,不会影响原来不生气的状态。
因此只要找到区间内,老板生气状态下,顾客最多的数量即可,这可以用滑动窗口技巧搞定。
class Solution {
public:
int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int X) {
// 维护一个大小为X的滑动窗口,使得原来改到生气的顾客数量最大
int n = customers.size();
int maxScore = 0, score = 0, res = 0;
for(int i=0;i<n;i++){
if(grumpy[i]==0){
res += customers[i];
}
}
for(int i=0,j=0;j<n;j++){
if(j-i+1>X){
if(grumpy[i]==1){
score-=customers[i];
}
i++;
}
if(grumpy[j]==1){
score+=customers[j];
}
if(j-i+1==X){
maxScore = max(maxScore,score);
}
}
return (res+maxScore);
}
};