文章目录
- 1052. 爱生气的书店老板
这个专栏记录自己刷题碰到的有关滑动窗口的题目。
1052. 爱生气的书店老板
题目链接:1052. 爱生气的书店老板
第一感应该是滑动窗口可以解决的,随后思考并写了几个版本,最终版本实现结合滑动窗口一次遍历,完美解决。
- 定义滑动窗口表示含义为所有生气时对应的进入店内的顾客总数,将其表示为curSum,同时记录遍历过程中能够获得的「生气时进入店内顾客总数的最大值」maxSum。
- 在滑动窗口遍历过程中维护 ans表示含义为:所有天数不生气时店主能够获取满意的顾客总数。
- 最终一次遍历完成后,maxSum + ans就是最终需要答案。「maxSum表示在连续minutes分钟内不生气,能够获得的所有对应的生气时的顾客总数,由于maxSum内的元素肯定不会出现在ans中,所以最终两者相加就是最后答案。」
- 具体滑动窗口如何遍历,见如下代码:
class Solution {public int maxSatisfied(int[] customers, int[] grumpy, int minutes) {int n = customers.length;int winSum = 0, maxSum = 0, ans = 0;int leftIdx = 0;for(int i = 0; i < n; i++){if(grumpy[i] == 1){winSum += customers[i];}else{ans += customers[i];}if(i - leftIdx + 1 > minutes){if(grumpy[leftIdx] == 1){winSum -= customers[leftIdx];} leftIdx++;}if(winSum > maxSum){maxSum = winSum;}}return ans + maxSum;}
}