【LeetCode刷题-滑动窗口】--1052.爱生气的书店老板

1052.爱生气的书店老板

【LeetCode刷题-滑动窗口】--1052.爱生气的书店老板_第1张图片

思路分析:

  • 如果grumy[i]=0表示在这个时刻进店的顾客本来就是满意的,书店老板即使发动技能,这部分的顾客也不会因此受到影响。真正受到影响的是grumy[i]=1的顾客,因此:

能够满意的客户数量 = 老板是不是发动技能都满意的客户数量 + 老板发动技能可以让顾客满意的数量

  • 其中老板发动技能可以让顾客满意的数量就是那些grumy[i]=1的那些顾客,为了求得这部分的区间和,我们可以使用前缀和:输入数组区间preSum[i]表示[0,i)的和,区间[i,…j]的和可以使用preSum[j]-preSum[i-1]
class Solution {
    public int maxSatisfied(int[] customers, int[] grumpy, int minutes) {
        int len = customers.length;
        //preSum[i]表示[0,i)里因为老板生气而感到不开心的顾客数
        int[] preSum = new int[len+1];

        //统计原本不生气的顾客数量和前缀和
        int originCount = 0;
        for(int i = 0; i < len;i++){
            if(grumpy[i] == 0){
                //不生气
                originCount += customers[i];  //不生气的顾客数量
                preSum[i + 1] = preSum[i];
            }else{
                //生气
                preSum[i + 1] = preSum[i] + customers[i];
            }
        }

        int maxAngryCount = 0;
        for(int left = 0;left < len - minutes + 1;left++){
            maxAngryCount = Math.max(maxAngryCount,preSum[left + minutes] - preSum[left]);
        }
        return originCount + maxAngryCount;
    }
}

你可能感兴趣的:(LeetCode,leetcode,算法)