题目

思路
- 求grumpy在全0时与正常grump在区间X范围内customers在这个区间和的最大差值。为了方便计算某区间的求和使用前缀和的技巧。p1计算正常grumpy内的customers的前缀和,p2计算grumpy全部为0的前缀和,然后在长度超过X时就可以计算它们的差值,最后取最大差值再加上P1的总和即可
代码
爱生气的书店老板public int maxSatisfied(int[] customers, int[] grumpy, int X) {int[] p1 = new int[customers.length + 1];int[] p2 = new int[customers.length + 1];int max = 0;for (int i = 1; i < p1.length; i++) {p1[i] = p1[i - 1] + (grumpy[i - 1] == 1 ? 0 : customers[i - 1]);p2[i] = p2[i - 1] + customers[i - 1];if (i >= X) max = Math.max(max, p2[i] - p2[i - X] - p1[i] + p1[i - X]);}return max + p1[p1.length - 1];}
