LeetCode 1052 爱生气的书店老板

LeetCode 1052 爱生气的书店老板

🟡 中等 https://leetcode.cn/problems/grumpy-bookstore-owner/description/

特殊的思路

一般的思路:维护两个和:一个是滑窗里面的客人,一个是滑窗外面的合法客人,在滑动的时候分别维护这两个和即可。

但是,也可以直接先求出所有合法的客人,然后把 customers 中合法的客人视作0即可,这样问题转化为求滑窗内不合法的客人最大值。

起始问题的本质就是求滑窗内不合法的客人数量最大值,但是结果要返回总数,因此可以要维护两个和,但是特殊的思路将问题转化到本质上了。

class Solution {

public:

    int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int minutes) {

        int satisfied_count = 0;

        for(int i= 0 ;i<customers.size();i++){

            if(grumpy[i]==0) satisfied_count+=customers[i];

        }

        for(int i = 0;i<=0+minutes-1-1;i++){

            if(grumpy[i]==1) satisfied_count+=customers[i];

        }

        int res = 0;

        for(int i = minutes-1;i<customers.size();i++){

            if(grumpy[i]==1) satisfied_count += customers[i];

            res = max(res,satisfied_count);

            if(grumpy[i-minutes+1]==1) satisfied_count-=customers[i-minutes+1];

        }

        return res;

    }

};