思路
本题有四种情况:
grumpy[i]=0,
grumpy[i]=1,
grumpy[i]=1,但是出于minutes内,
grumpy[i]=0且出于minutes内
可以发现,grumpy[i]=0,则一定加入最后的结果里,所以只要判断grumpy[i]=1 的情况。
解决方法
设置一个滑动窗口,窗口的元素和为maxS,输入minutes,所以窗口是定长的,用for循环使之向右滑动,每次滑动窗口中加入新元素,同时抛出最左边的元素(如果grumpy[i]=0,则减去0,因为grumpy[i]=0的元素我们另行计算,滑动窗口只解决,grumpy[i]=1 的元素取舍)
最后的结果是 sum(grumpy[i])+maxS
Code
class Solution {
public:
int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int minutes) {
int s[2] {};
int maxS = 0;
for(int i=0;i<customers.size();i++){
s[grumpy[i]]+=customers[i];//sum(grumpy[0])+sum(grumpy[1])
if(i<minutes -1){
continue;
}
maxS =max(maxS,s[1]);
s[1]-=(grumpy[i-minutes+1]?customers[i-minutes+1]:0);//移动窗口,并且对s[1]进行修改。
}
return s[0]+maxS;
}
};