Leetcode 1052. 爱生气的书店老板 (滑动窗口偏向笔试题)

我们只能改变一段区间里面老板由生气到不生气,不会影响原来不生气的状态。

因此只要找到区间内,老板生气状态下,顾客最多的数量即可,这可以用滑动窗口技巧搞定。

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);
    }
};

猜你喜欢

转载自blog.csdn.net/wwxy1995/article/details/113990399